Você precisa de duas coisas para corresponder às quebras de linha (daí várias linhas) usando grep
:
-
A opção
-
-z
do mais novo GNUgrep
, fará com que as linhas sejam separadas por ASCII NUL em vez de quebras de linha -
(?s)
é chamado modificador DOTALL (comgrep -P
), fará com quegrep
corresponda às quebras de linha (LF / CR) por.
(ponto)
Portanto, no seu caso, o seguinte deve funcionar:
grep -aPoz '(?s)<h2>.Some text' file.txt
Aqui .
corresponderá à nova linha.
Se você tiver CR e LF (ou não), então:
grep -aPoz '(?s)<h2>.{1,2}Some text' file.txt
Como grep
estava lendo os primeiros bytes para determinar o tipo de arquivo, portanto, o arquivo estava sendo tratado como um arquivo binário em grep
, -a
fará com que o arquivo seja tratado como um arquivo de texto.