precisa excluir todas as linhas do arquivo que estão contidas na linha abaixo

1

Eu tenho alguns arquivos que se parecem com isso:

0
04
040
040t
040te
040tes
040test
040test2
041
041t
041te
041tes
041test
041test1
0n
0ne
0ne-
0ne-o
0ne-os
0ne-osx

Preciso excluir todas as linhas incluídas na linha depois delas. IOW, eu preciso reduzi-lo para isso:

040test2
041test1
0ne-osx

Alguma sugestão para o Linux CLI ou o vim para realizar isso? Obrigado.

    
por Brannon 18.09.2018 / 22:29

2 respostas

2

No Vim você pode tentar este comando global:

g/^\(.*\)\n.\+/d
│ ├────────────┘ │
│ │              └ delete the matching lines (see ':h :d')
│ │
│ └ pattern matching 2 lines, the second one starting like the 1st
│
└ global command (see ':h :g')
    
por 18.09.2018 / 23:13
1

Perl para o resgate!

perl -lne 'print $prev if -1 == index $_, $prev;
           $prev = $_;
           END { print $prev }' -- file.txt
  • -n lê a linha de entrada por linha
  • -l remove novas linhas da entrada e as adiciona a print
  • $_ é a variável especial que contém a linha real lida da entrada
  • o índice retorna -1 se a substring (2º argumento) não for encontrada na string (1o argumento)
  • o bloco END é necessário para imprimir a última linha do arquivo
por 18.09.2018 / 22:36