当前位置:首页 > 编程笔记 > 正文
已解决

sed的不同执行方式

来自网友在路上 168868提问 提问时间:2023-09-23 04:41:10阅读次数: 68

最佳答案 问答题库688位专家为你答疑解惑

1. 命令行执行多条sed命令

1.1 命令行通过多条-e选项

sed -e 'command1' -e 'command2' -e 'command3' 

匹配root或nobody,或mail: 

sed -n -e '/^root/ p' -e '/^nobody/ p' -e '/^mail/p' /etc/passwd

1.2 用\换行

Shell的换行符依然有效,这有利于提高长命令的可读性。

sed -n -e '/^root/ p' \-e '/^nobody/ p' \-e '/^mail/p' /etc/passwd

1.3 用 { }组合语句块

sed -n '{
/^root/ p
/^nobody/ p
/^mail/ p 
}' /etc/passwd

2. sed脚本文件

如果需要复用一组sed命令,可以把它们写入一个脚本文件,然后用命令行参数-f调用。

数据文件data.txt内容:

101,Zhang san,Fu Jian
102,Li si,Shan Dong
103,Wang Wu,Bei Jing
104,Zhao Qian Sun,Zhe Jiang
105,Ge Lin,Shang Hai

脚本文件cmd.sed

s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
s/^.*/<&>/
s/Li/Lee/

执行命令

sed -f cmd.sed data.txt

3. 注释

sed脚本的注释行以井号#打头。为上面的脚本加上注释:

# Swap field 1 (id) with field 2 (name)
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
# Enclose the whole line within < and >
s/^.*/<&>/
# Replace Li with Lee
s/Li/Lee/

如果sed脚本 的首行的前两个字符为#n,那么sed会自动使用-n选项(不打印),这时打印需要脚本中显式调用p命令。

4. 把sed作为命令解释器

刚才演示的sed脚本执行过程,是从命令行用sed 命令加上-f参数选项调用的。那么,能否像shell脚本那样直接./执行呢?答案是肯定的。方法是在脚本的首行,调用sed作为命令解释器,换句话说,把脚本首行内容写为"#!/bin/sed -f"

#!/bin/sed -f
# Swap field 1 (id) with field 2 (name)
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
# Enclose the whole line within < and >
s/^.*/<&>/
# Replace Li with Lee
s/Li/Lee/

然后,赋予脚本可执行权限:

chmod 755 cmd.sed

接下来执行它:

./cmd.sed data.txt

效果和之前是一样的。 

5. 直接修改输入文件

sed缺省不会修改输入文件的内容。它会把修改后的内容输出到终端上。如果你需要保存修改后的内容,可以把它们重定向到另一个文件,或者用w命令写文件。如果你的目的就是修改源文件,那么,你还需要用新生成的文件覆盖源文件。

sed本身提供了一个-i选项,可以轻松的实现这个目的。在使用它之前,请先备份自己的源始数据文件。

sed -i -f cmd.sed data.txt

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"sed的不同执行方式":http://eshow365.cn/6-11894-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!