批量替换命令(sed)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
原文地址
/2009/10/unix -sed -tutorial-advanced-sed -substitutio n-examples/
发现thegeekstuff 确实是个不错的网站,一周推送geek 教程,看了后受益颇深,特此分享此为不完整译文加上本人一些理解
1.Sed 替换分隔符
除了\外,其他的字符都可以当作Sed 的替换分隔符,如 @ % | ; :
首先创建一个输入文件path.txt 1 2 3 4 $ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/omni/lbin :/opt/omni/sbin:/root/bin
示例一,指定@为替换分隔符,把/opt/omni/lbin 替换为/opt/tools/bin
1 2 3 4 $ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/tools/bin :/opt/omni/sbin:/root/bin
示例二,如果指定/为分隔符,那么新旧字符串的/需要用\转义
1 2 3 4 $ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin: /opt/tools/bin :/opt/omni/sbin:/root/bin
2,使用 '&' 得到匹配的字符串
示例一,替换/usr/bin/为/usr/bin/local
1 2 3 4 $ sed 's@/usr/bin@&/local@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local :/usr/sas/bin /usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local :/opt/omni/bin: /opt/omni/lbin:/opt/omni/sbin:/root/bin
示例二,使用&匹配整行
1 2 3 4 $ sed 's@^.*$@<<<&>>>@g' path.txt
<<>> <<>> <<>>
3,组及组引用
示例一,得到每行的第一个路径
示例二,多组,改变path.txt 最后一行字段的顺序 1 2 3 4 $ sed '$s@\([^:]*\):\([^:]*\):\([^:]*\)@\3:\2:\1@g' path.txt /usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/omni/bin: /root/bin:/opt/omni/sbin:/opt/omni/lbin
示例三,得到/etc/passwd 文件中的用户名列表 1 2 3 4 5 6 7 8 $sed 's/\([^:]*\).*/\1/' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
示例四,给单词的第一次字母加上括号
1 2 $ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g' (W )elcome (T )o (T )he (G )eek (S )tuff