Abra um Terminal pressionando Ctrl + Alt + T e use o comando abaixo de um linear. Não se esqueça de alterar o nome do arquivo de entrada para o seu.
Usando awk :
awk -v FS="(STRING1|STRING2)" '{print }' inputfile > outputfile
Usando grep :
grep -Pzo "(?<=STRING1)(.|\n)*(?=STRING2)" inputfile > outputfile
ou com o modificador DOTALL (Pontos de Partidas de Correspondência de Linhas). Faz com que .
corresponda até mesmo a \n
ew caracteres de linha.
grep -Pzo "(?s)(?<=STRING1).*?(?=STRING2)" inputfile > outpuffile
O (?s)
ativa o DOTALL para o grep.
ou como outra alternativa para corresponder aos caracteres de linha \n
ew, basta usar:
grep -Pzo "(?<=STRING1)[\s\S]*(?=STRING2)" inputfile > outpuffile
Em homem grep :
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
-P, --perl-regexp
Interpret PATTERN as a Perl compatible regular expression (PCRE)
-z, --null-data
Treat the input as a set of lines, each terminated by a zero byte (the ASCII
NUL character) instead of a newline. Like the -Z or --null option, this option
can be used with commands like sort -z to process arbitrary file names.
(?<=pattern)
: conhecido como Lookbehind positivo . Um par de parênteses, com o parêntese de abertura seguido por um ponto de interrogação, símbolo "menor que" e um sinal de igual.
Portanto, o (?<=STRING1).*?
(lookbehind positivo) corresponde a 0 ou mais ocorrências de quaisquer caracteres (que são opcionais devido ao uso de ?
após .*
) seguido por STRING1
de inputfile .
(?=pattern)
: conhecido como Lookahead positivo : o constructo lookahead positivo é um par de parênteses, com o parêntese de abertura seguido por um ponto de interrogação e um sinal de igual.
Assim, o .*?(?=STRING2)
: (lookahead positivo) corresponde a 0 ou mais ocorrências de qualquer caractere seguido por STRING2
.
Links para ler mais:
Tópicos Avançados do Grep
GREP para Designers