grep -v -B1 "^---" file.name
Procure todas as linhas que não começam com "---" e exiba essas linhas. "-B1" exibe a linha imediatamente antes.
Eu tenho um arquivo no seguinte formato:
--- V1 ---
Hi there
--- V2 ---
--- V3 ---
What's good
--- V4 ---
--- V5 ---
--- V6 ---
Eu quero usar algum tipo de script bash para remover qualquer uma das linhas que começam com três traços que não são imediatamente seguidos por uma linha que NÃO tenha três traços, por exemplo:
--- V1 ---
Hi there
--- V3 ---
What's good
Eu posso facilmente remover TODAS as linhas começando com traços, mas não sei como fazê-lo com base na seguinte linha (ou, alternativamente, com base na linha que precede as linhas não tracejadas).
Eu acho que "algum tipo" significa que você não insiste em pura bash. Se sim, então o awk pode fazer isso bem:
/tmp$ input="--- V1 ---
Hi there
--- V2 ---
--- V3 ---
What's good
--- V4 ---
--- V5 ---
--- V6 ---"
/tmp$ echo "$input" | awk '/^---/ {row = $0; if (wasdashed) next; wasdashed=1; next}; { if (wasdashed) print row; print $0}'
--- V1 ---
Hi there
--- V3 ---
What's good
/tmp$
De qualquer forma, com a mesma lógica, o bash puro seria possível, mas com muito mais código.
Tags command-line bash grep