Usando o script bash para remover algumas linhas que começam com determinados caracteres

0

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).

    
por Birdie 18.02.2016 / 01:50

2 respostas

0
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.

    
por 21.02.2016 / 23:31
2

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.

    
por 18.02.2016 / 04:38