Что означает тире e(-e) в командах sed?

Я новичок в sed, и всегда выполняю одну команду для входного файла, в последнее время я пытаюсь использовать "-e" работать с несколькими командами, но я не могу понять, как это действительно работает, печать по умолчанию довольно раздражает, поэтому я не могу понять, в каком порядке выполняются команды.

   sed -e 'command 1' -e 'command 2'  input.txt

содержимое файла input.txt:

line1
line2
line3

Вопрос 1: Что такое поток обработки? это

command1 processes line1 and then command2 processes new-line1(processed by cmd1)
command1 processes line2 and then command2 processes new-line2(processed by cmd1)
command1 processes line3 and then command2 processes new-line3(processed by cmd1)

или же

command1 processes line1
command1 processes line2
command1 processes line3
command2 processes new-line1(already processed by cmd1)
command2 processes new-line2(already processed by cmd1)
command2 processes new-line3(already processed by cmd1)

Вопрос 2: Как я уже упоминал, печать по умолчанию довольно раздражает, должен ли я использовать -n перед первым -e или перед обоими -e?

Заранее спасибо.

Изменить (кажется, рабочий поток является первым предположением):

input.txt

1
2
3

sed -e '{s/1/ONE/;s/2/TWO/;/3/q}' -e '{s/ONE/THREE/}' numbers.txt 

THREE
TWO
3

Я попробовал приведенную выше команду, и кажется, что рабочий процесс - команда1 обрабатывает строку1, а затем команда2 обрабатывает новую строку1(ее обработал cmd1), а затем cmd1 обрабатывает следующую строку

2 ответа

Решение

Команды sed -e объединяются для создания единого сценария sed. Следующее дает те же результаты (обратите внимание, что подразумевается -e):

sed '
    s/1/ONE/
    s/2/TWO/
    /3/q
    s/ONE/THREE/
' input.txt

Или как один лайнер:

sed 's/1/ONE/; s/2/TWO/; /3/q; s/ONE/THREE/' input.txt

Sed --help скажет вам, что означает -e:

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

Я использовал sed в течение многих лет, и 99% времени я использую -e, кроме случаев, когда я хочу изменить файл, тогда я использовал -i

Вопрос 1: я не уверен насчет потока, но чтобы не рисковать, я всегда передаю его другому седу

например:

cat input.txt | sed -e 'command 1' | sed -e 'command 2'

Вопрос 2: WRT печать по умолчанию, да, вы можете объединить.

По умолчанию:

tiago@dell:~$ cat /etc/passwd | sed -e '/root/ !d'
root:x:0:0:root:/root:/bin/bash

Тихо:

tiago@dell:~$ cat /etc/passwd | sed -ne '/root/p'
root:x:0:0:root:/root:/bin/bash
Другие вопросы по тегам