Qual é o propósito do comando -e in sed?

32

Não consigo encontrar nenhuma documentação sobre a opção sed -e , para substituir simples, preciso disso?

por exemplo,

sed 's/foo/bar/'

VS

sed -e 's/foo/bar/'
    
por Howard 01.03.2012 / 09:31

2 respostas

22

Isso pode funcionar para você:

sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file

Em cada caso, os comandos i (insert), a (append) e c (change) precisam ser finalizados por uma nova linha.

Normalmente, os comandos podem ser separados por ; , por exemplo /foo/d;/bar/d e agrupados por {... } /foo/{h;d} , mas para os comandos i,a,c , o -e fornece uma maneira de separar os comandos.

A alternativa é usar o shell (bash) para inserir uma nova linha:

sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file
    
por 01.03.2012 / 10:16
17

Da página do manual:

-e script, --expression=script

    add the script to the commands to be executed

Assim, você pode usar várias opções de -e para criar um script com muitas partes.

$ sed -e "s/foo/bar/" -e "/FOO/d"

Primeiro, substitua foo por bar e exclua todas as linhas que contiverem FOO .

    
por 01.03.2012 / 09:33