Что означает тире 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