sed para imprimir o padrão que se estende pelas linhas

2

Estou aprendendo sed e atualmente estou com o seguinte problema:

Eu quero extrair as linhas encontradas entre ^C da seguinte saída:

banner exec ^C
This is
the
banner
^C
banner motd ^C
This is
the MOTD
banner
^C
!
line con 0
 exec-timeout 0 0
 privilege level 15
 logging synchronous

Estou usando isso como referência, mas não Não parece uma boa idéia se você não sabe quantas linhas você irá capturar. Qual seria a melhor maneira de lidar com isso?

    
por Luis E 04.07.2016 / 18:32

2 respostas

2

algo assim deve funcionar, supondo que os dados de origem estejam no arquivo test.txt, isso usa o grep para excluir as linhas que contêm o '^ C':

sed -n '/\^C/,/\^C/p' test.txt|grep -v '\^C'

Saída do seu exemplo:

This is
the
banner
This is
the MOTD
banner
    
por 04.07.2016 / 18:42
1

Então, eu percebi isso. Parece que isso faz o truque:

sed -n '/\^C/,/\^C/{/\^C/!{p}}' input

Aparentemente, você pode executar o sed entre duas regexes correspondidas, portanto, basta colocar a mesma regex como início e fim /\^C/,/\^C/ e, em seguida, imprimi as linhas, ignorando a última linha que contém o mesmo padrão.

Eu não sei se esse é o melhor método, mas parece funcionar.

    
por 04.07.2016 / 18:43