Para usar greppara duas linhas diferentes, pesquise os dois padrões
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Ou use alternância
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Para obter a próxima linha após um padrão, você pode usar a opção de contexto
$ grep -A1 sweet file_type
This is a sweet
lemon.
Mas se você estiver procurando explicitamente para um padrão de múltiplas linhas, isso é porque complicada greppensa em linhas ... . Você .*vai pegar tudo entre "doce" e "limão" na linha . Podemos obter "limão" na próxima linha -Pusando \npara corresponder à nova linha e dizendo que grepo arquivo é nulo separado por -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Notas:
-EUse expressões regulares estendidas (para usar |caracteres para alternância sem precisar escapar)
-An Imprima linhas adicionais após o padrão, em que n é o número de linhas finais a serem impressas
-PUse expressões regulares no estilo perl (em vez de "experimental" em grepinstall pcregreppara obter melhor suporte ao perl regex)
-zUse o caractere nulo como separador (apenas fingindo neste caso, mas grepaceitaremos nossa palavra)
Embora o grep -zPcomando funcione nesse caso específico (um arquivo que consiste exatamente de duas linhas), em geral, qualquer arquivo separado por nova linha comum é uma única linha; portanto, despeje todo o conteúdo do arquivo (se houver uma correspondência em algum lugar) ou nada; geralmente não é para isso que as pessoas usam grep.
10266 Marc Marie Leeuwen
sim isso só é útil com -o... editado ...
Zanna
Caso isso seja tentado em outras distros, você poderá encontrar: grep: The -P and -z options cannot be combined- por exemplo, grep (GNU grep) 2.5.1 no RHEL
desculpe, mas isso vai corresponder exatamente ao "doce | limão"
αғsнιη 10/12/16
4
@KasiyA Esta linha está funcionando bem. greppor padrão, funciona no "modo padrão", onde "caracteres especiais" |, como +, *são interpretados literalmente, a menos que sejam mascarados com uma barra invertida. Veja, por exemplo, esta resposta . Para usar do jeito que você provavelmente está acostumado, que "caracteres especiais" precisam ser mascarados para serem interpretados literalmente, você precisa mudar para o "modo estendido" ( grep -E). Talvez madneon poderia elaborar um pouco mais sobre suas respostas, por exemplo o que os OPs tente iria ter acompanhado?
grep -zP
comando funcione nesse caso específico (um arquivo que consiste exatamente de duas linhas), em geral, qualquer arquivo separado por nova linha comum é uma única linha; portanto, despeje todo o conteúdo do arquivo (se houver uma correspondência em algum lugar) ou nada; geralmente não é para isso que as pessoas usamgrep
.-o
... editado ...grep: The -P and -z options cannot be combined
- por exemplo, grep (GNU grep) 2.5.1 no RHELComo isso:
fonte
grep
por padrão, funciona no "modo padrão", onde "caracteres especiais"|
, como+
,*
são interpretados literalmente, a menos que sejam mascarados com uma barra invertida. Veja, por exemplo, esta resposta . Para usar do jeito que você provavelmente está acostumado, que "caracteres especiais" precisam ser mascarados para serem interpretados literalmente, você precisa mudar para o "modo estendido" (grep -E
). Talvez madneon poderia elaborar um pouco mais sobre suas respostas, por exemplo o que os OPs tente iria ter acompanhado?