已解决
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%的人还看了
相似问题
- shell 脚本的函数和数组
- shell脚本三
- 二百零六、Flume——Flume1.9.0单机版部署脚本(附截图)
- Linux 启动停止重启jar包shell脚本
- shell脚本用法参数
- ES索引数据清理脚本示例
- hadoop 编写开启关闭集群脚本, hadoop hdfs,yarn开启关闭脚本。傻瓜式hadoop脚本 hadoop(九)
- 暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
- Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本
- Redis学习笔记14:基于spring data redis及lua脚本ZSET有序集合实现环形结构案例及lua脚本如何发送到redis服务器
猜你感兴趣
版权申明
本文"sed的不同执行方式":http://eshow365.cn/6-11894-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!