Isso parece funcionar:
${H;x;p;q}
/Start/ {x;s/^\n//;p;d}
{H;N}
/Stop\nRec/ {s/.*//;h;d}
D
O arquivo de entrada é assim:
AAAAAAAAAAA
BBBBBBBBBBB
Start
CCCCCCCCCCC
DDDDDDDDDDD
Stop
EEEEEEEEEEE
Stop
Rec
FFFFFFFFFFF
GGGGGGGGGGG
HHHHHHHHHHH
Start
IIIIIIIIIII
JJJJJJJJJJJ
Start
KKKKKKKKKKK
LLLLLLLLLLL
MMMMMMMMMMM
NNNNNNNNNNN
Stop
Rec
OOOOOOOOOOO
PPPPPPPPPPP
QQQQQQQQQQQ
RRRRRRRRRRR
SSSSSSSSSSS
TTTTTTTTTTT
UUUUUUUUUUU
VVVVVVVVVVV
Start
WWWWWWWWWWW
XXXXXXXXXXX
YYYYYYYYYYY
ZZZZZZZZZZZ
Saída desejada:
AAAAAAAAAAA
BBBBBBBBBBB
FFFFFFFFFFF
GGGGGGGGGGG
HHHHHHHHHHH
Start
IIIIIIIIIII
JJJJJJJJJJJ
OOOOOOOOOOO
PPPPPPPPPPP
QQQQQQQQQQQ
RRRRRRRRRRR
SSSSSSSSSSS
TTTTTTTTTTT
UUUUUUUUUUU
VVVVVVVVVVV
Start
WWWWWWWWWWW
XXXXXXXXXXX
YYYYYYYYYYY
ZZZZZZZZZZZ
Eu quero remover todas as linhas entre as tags Start
e tags Stop\nRec
(tags incluídas). A seqüência Start
- Stop\nRec
pode aparecer muitas vezes em um arquivo longo. AAAAAA
, BBBBBB
, ...ZZZZZZ
linhas podem ser qualquer coisa. As tags ( Start
e Stop\nRec
) não compartilham a linha com os dados (ou seja, devem ser pesquisadas como ^tag$
. A tag final Stop\nRec
precisa ser tag de 2 linhas.
Mas, quando vários Start
são encontrados antes de ser encontrado Stop\nRec
, a supressão só deve ser aplicada a partir do último Start
encontrado antes do Stop\nRec
(no exemplo, as linhas IIIIIII
e JJJJJJJ
são mantido).
E, no final do arquivo, quando uma tag Start
é encontrada, mas nenhuma tag Stop\nRec
, as linhas entre esse Start
e o final do arquivo devem ser mantidas (por exemplo, linhas Start WWWWWW XXXXXX YYYYYY ZZZZZZ
são mantidos).
Eu quero fazer este retrabalho com sed (rodando sob o shell bash no Linux) e usando a opção -i (mesmo arquivo para entrada e saída).
Eu fiz o seguinte, mas ele não funciona corretamente (especialmente quando vários tag Start são encontrados antes de uma tag Stop \ nRec ser alcançada):
sed -i '/^Start\n/ {:a; $!{ N ; /\nStop\nRec$/!ba } s/.*// }' file.txt
Agradecemos antecipadamente por sua ajuda.
Isso parece funcionar:
${H;x;p;q}
/Start/ {x;s/^\n//;p;d}
{H;N}
/Stop\nRec/ {s/.*//;h;d}
D
Tente testar
sed '
/Start/! b
:a
/\nStart$/{
P
D
}
N
$b
/Stop\nRec/! ba
d
' Input.file
Tags text-processing sed