我是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处理下一行
答案 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