Linux管理-sed

来源:互联网 发布:gis制作栅格数据裁剪 编辑:程序博客网 时间:2024/05/15 02:23

sed全名叫stream editor 流编辑器。

s命令
用s命令替换文件中匹配的内容

zyf@zyf-ThinkPad-Edge-E545:~/Test$ cat sedfile This is a test file.I am a coder.HaHa is happy.HeHe is not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "s/is/was/g" sedfile Thwas was a test file.I am a coder.HaHa was happy.HeHe was not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$

这里出现一个问题,This 单词中的is也被替换了,Thwas明显不是我们想要的,所以全局替换一定要注意匹配准确。

zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "s/ is / was /g" sedfile This was a test file.I am a coder.HaHa was happy.HeHe was not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$

注意,此时并没有改变文件实际的内容,只是将改变后的结果输出打印。要想改变文件的内容,需要加上-i参数。

zyf@zyf-ThinkPad-Edge-E545:~/Test$ cat sedfile This is a test file.I am a coder.HaHa is happy.HeHe is not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed -i "s/ is / was /g" sedfile zyf@zyf-ThinkPad-Edge-E545:~/Test$ cat sedfile This was a test file.I am a coder.HaHa was happy.HeHe was not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$

还有一些用法:

zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "s/^/#/g" sedfile #This was a test file.#I am a coder.#HaHa was happy.#HeHe was not happy.zyf@zyf-ThinkPad-Edge-E545:~/Test$

在每行开头加上#字符

zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "s/$/\//g" sedfile This was a test file./I am a coder./HaHa was happy./HeHe was not happy./zyf@zyf-ThinkPad-Edge-E545:~/Test$ 

在每行最后追加/符号。”\/”中的\符号是转义符,因为/是个特殊符号需要转义才能显示这个符号本身。
顺手介绍一下正则表达式的一些最基本的东西:

^ 表示一行的开头。如:/^#/ 以#开头的匹配。$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。\< 表示词首。 如 \<abc 表示以 abc 为首的詞。\> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。. 表示任何单个字符。* 表示某个字符出现了0次或多次。[ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符---摘于coolshell大神博客

c命令
有天需要写脚本修改/etc/sysconfig/clock文件中的时区,好久没搞出来,后来在coolshell里看到这个c命令介绍,c命令的作用就是替换匹配行。

zyf@zyf-ThinkPad-Edge-E545:~/Test$ cat sedfile This was a test file.zoneinfo="/usr/share/zoneinfo/Asia/Beijing"zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "/zoneinfo=/c zoneinfo=\"/usr/share/zoneinfo/Asia/Karachi\"" sedfileThis was a test file.zoneinfo="/usr/share/zoneinfo/Asia/Karachi"

就是将匹配词所在的一行换为后面的这句话。

a命令和i命令

zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "/zoneinfo=/i insert one line" sedfile This was a test file.标题insert one linezoneinfo="/usr/share/zoneinfo/Asia/Beijing"zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "/zoneinfo=/a append one line" sedfile This was a test file.zoneinfo="/usr/share/zoneinfo/Asia/Beijing"append one line

a是在匹配行后追加一行,i是在匹配行前插入一行。
也可以用sed “1 i xxxx” file是在第一行前插入一行xxx;sed “$ a xxx” file是在最后一行后追加一行xxx

d命令

zyf@zyf-ThinkPad-Edge-E545:~/Test$ cat sedfile This was a test file.zoneinfo="/usr/share/zoneinfo/Asia/Beijing"zyf@zyf-ThinkPad-Edge-E545:~/Test$ sed "/zoneinfo=/d" sedfile This was a test file.

d命令,删除匹配行。

0 0
原创粉丝点击