Grep um bloco de texto usando o padrão

1

Eu tenho um arquivo de texto curto, onde eu deveria fazer a saída de dados usando um padrão especial. Meu arquivo:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1
18 test4

Um por um, do test1 ao test2 e ao test3. Então ... eu escrevi o comando:

sed '/test1.*\|test2.*\|test3/!d' filename

E na saída eu tenho resultado:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1

Neste caso, eu tenho linhas que eu não preciso:

11 test1

17 test1

Estas linhas não são uma após uma. Como eu posso fazer o resultado, que eu preciso? Por favor me ajude. Agradecimentos para sua atenção. Eu deveria obter este resultado:

99 test1
88 test2
10 test3
12 test1
13 test2
14 test3
    
por Valeriu 08.02.2017 / 21:20

1 resposta

0

Supondo que seus dados estão em um arquivo chamado test , aqui está um one-liner, mas sem sed :

cat test | tr '\n' '_' | grep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3' | tr '_' '\n'

O que esta linha está fazendo

  1. Alterando o conteúdo de test de várias linhas para uma linha com tr '\n' '_'
  2. Obtenha apenas a parte, em que test1 , test2 e test3 estão atrás do outro com grep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3'
  3. Retornando de uma linha para várias linhas com tr '_' '\n'
por 09.02.2017 / 17:44