Quando precisamos de '-e' para sed?

0

Eu estava lendo o link e tenho uma dúvida sobre a opção -e do sed.

Se eu estiver correto, -e é usado para preceder um comando sed inline. Mas podemos especificar um comando inline sed sem -e . Por exemplo, os dois seguintes funcionam da mesma forma para mim:

$ echo foo | sed  's/foo/bar/g'
bar

$ echo foo | sed -e 's/foo/bar/g'
bar

Não é como se -f precisasse especificar um script sed. Quando precisamos de -e ? No caso específico no link fornecido no início, por que precisamos de -e ?

Obrigado.

    
por Tim 21.08.2017 / 14:29

2 respostas

1

Você normalmente deseja usar -e (possivelmente junto com -f ) quando quiser passar mais de uma expressão como sed code.

As expressões dadas após -e e o conteúdo dos arquivos fornecidos após -f são concatenados (com novas linhas) para formar o script sed . Quando você deseja transmitir apenas uma expressão literal, pode omitir o -e e passar essa expressão como o primeiro argumento não opcional para sed .

sed -e s/foo/bar/ -f file.sed -e 'a\' -e foo

é o mesmo que fazer:

sed 's/foo/bar/
content of file.sed
a\
foo'

Como há locais (como após os comandos w / r / # e mais, dependendo das implementações), em que você não pode usar ; para separar comandos e outros em que você precisa newline (como esse a acima), usar vários -e s é uma maneira de manter o comando sed em uma linha (útil para shells como csh que tornam difícil inserir comandos de várias linhas ou shells como ksh , que faz com que seja difícil editá-los

.

No caso de:

sed 's/foo/bar/g'

vs

sed -e 's/foo/bar/g'

Isso não faz diferença alguma.

    
por 22.08.2017 / 00:31
3

Isso é respondido na página man do sed ( man sed )

-e script, --expression=script add the script to the commands to be executed

e

If no -e, --expression [...] option is given, then the first non-option argument is taken as the sed script to interpret. All remaining arguments are names of input files; if no input files are specified, then the standard input is read.

Portanto, se você tiver apenas um argumento para sed , ele será tratado como um script sed . Se você tiver mais de um, deverá usar -e ou --expression para identificar qual argumento é um script sed .

No caso do seu exemplo específico, as duas alternativas são sinônimos.

    
por 21.08.2017 / 14:40

Tags