Como posso usar sed
para excluir as linhas dois (ou qualquer número) após uma correspondência, mas não incluindo a correspondência e as linhas intermediárias?
Por exemplo:
Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
> mysecretword
Password accepted
Desejo excluir apenas a linha "> mysecretword" por estar duas linhas após a linha "Digite sua senha no prompt abaixo". Não posso usar posições absolutas de número de linha, porque a correspondência pode aparecer em qualquer número de linhas após o início do arquivo.
Pesquisando online, encontro muitas soluções como sed '/Enter your password.*/,+3d' filex
, mas isso também removeria a linha "Digite sua senha ..." e a linha seguinte, que não é o que eu quero. Eu só quero remover uma linha, que é um certo número de linhas após uma partida.
Como posso fazer isso com sed
(ou mesmo com qualquer outra ferramenta comumente disponível)?
Talvez
ou equivalente:
Para casos genéricos, veja esta excelente resposta de Ed Morton: Imprimindo com sed ou awk uma linha seguindo um padrão correspondente .
Solicitando entrada dada
/^Enter your password/{c=2} 1
aquic
está a enésima linha após a correspondência a ser ignorada,1
para imprimir o registro de entradac && !--c{next}
o&&
operador is de curto-circuito, portanto, desde que sejac
avaliado como falso,c
não será decrementado. Depoisc
de definido para um valor, ele será decrementado desde que não atinja0