sed 命令中的破折号 e(-e) 是什么意思?

Hai*_*ang 4 sed

我是 sed 的新手,总是在输入文件上执行一个命令,最近我尝试使用它"-e"来处理多个命令,但我无法弄清楚它是如何工作的,默认打印非常烦人,所以我无法弄清楚命令执行的顺序。

   sed -e 'command 1' -e 'command 2'  input.txt
Run Code Online (Sandbox Code Playgroud)

input.txt的内容:

line1
line2
line3
Run Code Online (Sandbox Code Playgroud)

问题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)
Run Code Online (Sandbox Code Playgroud)

或者

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)
Run Code Online (Sandbox Code Playgroud)

问题 2: 正如我提到的,默认打印非常烦人,我应该在第一个 -e 前面使用 -n 还是在两个 -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
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的命令,看起来工作流程是command1处理line1,然后command2处理new-line1(cmd1处理它),然后cmd1处理下一行

Col*_*ney 5

sed -e 命令组合起来创建一个 sed 脚本。以下产生相同的结果(请注意 -e 是隐含的):

sed '
    s/1/ONE/
    s/2/TWO/
    /3/q
    s/ONE/THREE/
' input.txt
Run Code Online (Sandbox Code Playgroud)

或者作为单行:

sed 's/1/ONE/; s/2/TWO/; /3/q; s/ONE/THREE/' input.txt
Run Code Online (Sandbox Code Playgroud)