Como fornecer um padrão para uma nova linha no grep? Nova linha no início, nova linha no final. Não é a forma de expressão regular. Algo como \ n.
$. É um pouco limitado, mas pode ser usado em casos simples.
Como fornecer um padrão para uma nova linha no grep? Nova linha no início, nova linha no final. Não é a forma de expressão regular. Algo como \ n.
$. É um pouco limitado, mas pode ser usado em casos simples.
Respostas:
grep os padrões são combinados com linhas individuais, portanto, não há como um padrão corresponder a uma nova linha encontrada na entrada.
No entanto, você pode encontrar linhas vazias como esta:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
tente em pcregrepvez de regular grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
a -Mopção permite a correspondência em várias linhas, para que você possa pesquisar por novas linhas como \n.
Graças a @jarno eu conheço a opção -z e descobri que ao usar GNU grep com a opção -P, é possível fazer a correspondência\n . :)
Exemplo:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Impressões bar
grep -zoPnir "dex\n035" ./dir/
Você pode usar desta forma ...
grep -P '^\s$' file
-Pé usado para expressões regulares Perl (uma extensão para POSIX grep).\scorresponder aos caracteres de espaço em branco; se seguido por *, também corresponde a uma linha vazia.^corresponde ao início da linha. $corresponde ao fim da linha. -Pé uma extensão GNU. Posso usá-lo quando a situação exigir (normalmente lookahead / lookbehind), mas POSIX grep pode fazer isso apenas com o arquivo [[:space:]].
-P. GNU é bastante padrão de qualquer maneira. :)
brew install grepobter o GNU grep, que é superior em vários aspectos. apple.stackexchange.com/questions/193288/…
Quanto à solução alternativa (sem usar não portátil -P), você pode substituir temporariamente um caractere de nova linha por um diferente e alterá-lo novamente, por exemplo:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
Basicamente, ele está procurando uma correspondência exata _foo_onde _significa \n(então __= \n\n). Você não precisa traduzi-lo de volta por tr '_' '\n', já que cada padrão seria impresso na nova linha de qualquer maneira, então removê-lo _é suficiente.
<(p paste -sd_ file )?
new line at the beginningé uma linha em branco enew line at endse aplica a todas as linhas do arquivo. Você pode postar um exemplo?