grep
não foi projetado para pesquisar padrões em várias linhas. Existem outras ferramentas mais adequadas para esta tarefa: awk
e sed
.
Como você está usando variáveis para manter os padrões, as coisas podem ficar complicadas. Por favor, tente primeiro com padrões codificados. Se você acertar, tente substituir os padrões codificados por variáveis.
Usando awk
:
awk '/'"$Var1"'/,/'"$Var2"'/' file.txt
O mesmo comando com padrões codificados para explicar o conceito:
awk '/pattern1/,/pattern2/' file.txt
Explicação:
-
/pattern1/,/pattern2/
é um intervalo. o intervalo começa na linha que corresponde apattern1
e termina na linha que corresponde apattern2
. - por padrão
awk
apenas imprime linhas que estão no intervalo.
Saiba mais sobre awk
: link
Usando sed
:
sed -n '/'"$Var1"'/,/'"$Var2"'/ p' file.txt
O mesmo comando com padrões codificados para explicar o conceito:
sed -n '/pattern1/,/pattern2/ p' file.txt
Explicação:
-
-n
faz sed para imprimir linhas apenas se for contada. -
/pattern1/,/pattern2/
é um intervalo. o intervalo começa na linha que corresponde apattern1
e termina na linha que corresponde apattern2
. para cada linha desse intervalo, os seguintes comandos são executados. - o
p
no final informased
para imprimir linhas.
Saiba mais sobre sed
: link
Se realmente precisar usar grep
, você poderá usar -P
para informar grep
para usar o mecanismo de expressão regular perl. A página man tem isso a dizer sobre esse recurso:
Interpret the pattern as a Perl-compatible regular expression (PCRE). This is highly experimental and grep -P may warn of unimplemented features.