dash e(-e)在sed命令中的含义是什么?

时间:2014-05-15 22:39:31

标签: 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: 正如我所提到的,默认打印非常烦人,我应该在-e之前或之前使用-n吗?

提前致谢。

编辑(似乎工作流程是第一个假设):

input.txt

1
2
3

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

THREE
TWO
3

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

2 个答案:

答案 0 :(得分:3)

组合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

答案 1 :(得分:1)

sed --help会告诉你 - 是什么意思:

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

我已经使用sed多年了,99%的时间我使用-e,除非我想更改文件然后我用-i

问题1:我不确定流程,但为了安全起见,我总是把它送到另一个sed

例如:

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