awk: Exibir regex correspondente (multilinha)
Eu tenho um arquivo que se parece com isso:
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
SF:/home/developer/project/src/resources/otherfile.js
DA:9,2
DA:15,2
DA:22,2
end_of_record
...some more SF:/home/xxx and end_of_record lines...
O arquivo consiste em blocos que começam comSF: ...
e terminando comend_of_record
. Observe que a contagem das linhas entreDA:x,x
) pode ser diferente. Quero imprimir todos os blocos que tenham a string "test" em sua primeira linha (como "SF: / home / developer /teste/ resources / ... "aqui). Para este exemplo, minha saída desejada seria:
SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
Eu quero fazer isso em umLinux meio Ambiente.
Minha primeira tentativa foi fazer isso usando o comando "sed", mas depois de algumas pesquisas parecia que "awk" é uma ferramenta mais adequada para fazer operações multilinhas.
Usando awk e Regex, este é o comando que tenho até agora:
awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile
Mas produz o totalexamplefile
, não apenas os blocos contendo "teste" na primeira linha. Eu não tenho certeza se o meu Regex está errado ou se estou faltando alguma coisa na minhaawk
ligar.
Como posso obter apenas o bloco com "teste" na primeira linha?