Inserir após um segundo padrão em sed

1

Estou usando o sed para editar um arquivo de texto. O comando:

sed -n -e '/pattern1/,/pattern2/p' test01.txt

mostra as linhas entre pattern1 e pattern2. Mas como posso inserir uma nova linha após esse pattern2 ? minha versão sed não admite "i \" para a edição line-command. Estou executando uma porta do FreeBSD.

    
por X3MBoy 29.11.2011 / 22:05

1 resposta

2

Se você quiser apenas inserir uma nova linha após o pattern2, então isso funcionará -

sed '/pattern2/s/$/\n/' file

[jaypal:~/Temp] cat file
some text
some text
some text pattern1
some text p
some text p 
some text p
some text pattern2
some text
some text

[jaypal:~/Temp] sed '/pattern2/s/$/\n/' file
some text
some text
some text pattern1
some text p
some text p 
some text p
some text pattern2

some text
some text

i\ é para inserção. Ele inseria before de um endereço. Se você precisar de uma nova linha, use \a , que é append .

[jaypal:~/Temp] sed '/pattern2/ a\
' file
some text
some text
some text pattern1
some text p
some text p 
some text p
some text pattern2

some text
some text

Se você quiser adicionar uma nova linha após suas linhas / pattern2 / e exibir linhas entre elas, pode ser que você possa fazer algo assim -

[jaypal:~/Temp] sed -e '/pattern2/G' -ne '/pattern1/,/pattern2/p' file
some text pattern1
some text p
some text p 
some text p
some text pattern2

[jaypal:~/Temp] 

Solução semelhante em awk -

[jaypal:~/Temp] cat file
some text
some text
some text pattern1
some text p
some text p 
some text p
some text pattern2
some text
some text

[jaypal:~/Temp] awk '/pattern1/,/pattern2/ END{print ""}' file
some text pattern1
some text p
some text p 
some text p
some text pattern2

[jaypal:~/Temp] 
    
por 29.11.2011 / 22:42

Tags