sed很强大的文本操作命令.docx

上传人:b****3 文档编号:4318366 上传时间:2023-05-07 格式:DOCX 页数:20 大小:23.42KB
下载 相关 举报
sed很强大的文本操作命令.docx_第1页
第1页 / 共20页
sed很强大的文本操作命令.docx_第2页
第2页 / 共20页
sed很强大的文本操作命令.docx_第3页
第3页 / 共20页
sed很强大的文本操作命令.docx_第4页
第4页 / 共20页
sed很强大的文本操作命令.docx_第5页
第5页 / 共20页
sed很强大的文本操作命令.docx_第6页
第6页 / 共20页
sed很强大的文本操作命令.docx_第7页
第7页 / 共20页
sed很强大的文本操作命令.docx_第8页
第8页 / 共20页
sed很强大的文本操作命令.docx_第9页
第9页 / 共20页
sed很强大的文本操作命令.docx_第10页
第10页 / 共20页
sed很强大的文本操作命令.docx_第11页
第11页 / 共20页
sed很强大的文本操作命令.docx_第12页
第12页 / 共20页
sed很强大的文本操作命令.docx_第13页
第13页 / 共20页
sed很强大的文本操作命令.docx_第14页
第14页 / 共20页
sed很强大的文本操作命令.docx_第15页
第15页 / 共20页
sed很强大的文本操作命令.docx_第16页
第16页 / 共20页
sed很强大的文本操作命令.docx_第17页
第17页 / 共20页
sed很强大的文本操作命令.docx_第18页
第18页 / 共20页
sed很强大的文本操作命令.docx_第19页
第19页 / 共20页
sed很强大的文本操作命令.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

sed很强大的文本操作命令.docx

《sed很强大的文本操作命令.docx》由会员分享,可在线阅读,更多相关《sed很强大的文本操作命令.docx(20页珍藏版)》请在冰点文库上搜索。

sed很强大的文本操作命令.docx

sed很强大的文本操作命令

转载请注明

作者:

海底苍鹰

地址:

sed很强大的文本操作命令

张映发表于2010-08-24

分类目录:

shell

sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。

sed按顺序逐行读取文件。

然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中。

完成了一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。

在这里要注意一点,源文件(默认地)保持不被修改。

sed默认读取整个文件并对其中的每一行进行修改。

说白了就是一行一行的操作。

我用sed主要就是用里面的替换功能,真的很强大。

下面以实例,详细的说一下,先从替换开始,最常用的。

一,测试文件test,讲awk时用的一样

1.[zhangy@BlackGhost mytest]# sed -h  打印帮助,并显示bug列表的地址。

2.-n, --quiet, --silent    取消自动打印模式空间  

3. -e 脚本, --expression=脚本   添加“脚本”到程序的运行列表  

4. -f 脚本文件, --file=脚本文件  添加“脚本文件”到程序的运行列表  

5. --follow-symlinks    直接修改文件时跟随软链接  

6. -i[扩展名], --in-place[=扩展名]    直接修改文件(如果指定扩展名就备份文件)  

7. -l N, --line-length=N   指定“l”命令的换行期望长度  

8. --posix  关闭所有 GNU 扩展  

9. -r, --regexp-extended  在脚本中使用扩展正则表达式  

10. -s, --separate  将输入文件视为各个独立的文件而不是一个长的连续输入  

11. -u, --unbuffered  从输入文件读取最少的数据,更频繁的刷新输出  

12. --help     打印帮助并退出  

13. --version  输出版本信息并退出  

14.  

15.//下面test文件的内容  

16.root:

x:

0:

0:

root:

/root:

/bin/bash  

17.bin:

x:

1:

1:

bin:

/bin:

/bin/false  

18.daemon:

x:

2:

2:

daemon:

/sbin:

/bin/false  

19.mail:

x:

8:

12:

mail:

/var/spool/mail:

/bin/false  

20.ftp:

x:

14:

11:

ftp:

/home/ftp:

/bin/false  

21.&nobody:

$:

99:

99:

nobody:

/:

/bin/false  

22.zhangy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash  

23.http:

x:

33:

33:

:

/srv/http:

/bin/false  

24.dbus:

x:

81:

81:

System message bus:

/:

/bin/false  

25.hal:

x:

82:

82:

HAL daemon:

/:

/bin/false  

26.mysql:

x:

89:

89:

:

/var/lib/mysql:

/bin/false  

27.aaa:

x:

1001:

1001:

:

/home/aaa:

/bin/bash  

28.ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash  

29.test:

x:

1003:

1003:

:

/home/test:

/bin/bash  

30.@zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash  

31.policykit:

x:

102:

1005:

Po  

sed-h

-n,--quiet,--silent取消自动打印模式空间

-e脚本,--expression=脚本添加“脚本”到程序的运行列表

-f脚本文件,--file=脚本文件添加“脚本文件”到程序的运行列表

--follow-symlinks直接修改文件时跟随软链接

-i[扩展名],--in-place[=扩展名]直接修改文件(如果指定扩展名就备份文件)

-lN,--line-length=N指定“l”命令的换行期望长度

--posix关闭所有GNU扩展

-r,--regexp-extended在脚本中使用扩展正则表达式

-s,--separate将输入文件视为各个独立的文件而不是一个长的连续输入

-u,--unbuffered从输入文件读取最少的数据,更频繁的刷新输出

--help打印帮助并退出

--version输出版本信息并退出

//下面test文件的内容

root:

x:

0:

0:

root:

/root:

/bin/bash

bin:

x:

1:

1:

bin:

/bin:

/bin/false

daemon:

x:

2:

2:

daemon:

/sbin:

/bin/false

mail:

x:

8:

12:

mail:

/var/spool/mail:

/bin/false

ftp:

x:

14:

11:

ftp:

/home/ftp:

/bin/false

&nobody:

$:

99:

99:

nobody:

/:

/bin/false

zhangy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash

http:

x:

33:

33:

:

/srv/http:

/bin/false

dbus:

x:

81:

81:

Systemmessagebus:

/:

/bin/false

hal:

x:

82:

82:

HALdaemon:

/:

/bin/false

mysql:

x:

89:

89:

:

/var/lib/mysql:

/bin/false

aaa:

x:

1001:

1001:

:

/home/aaa:

/bin/bash

ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash

test:

x:

1003:

1003:

:

/home/test:

/bin/bash

@zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash

policykit:

x:

102:

1005:

Po

二,举例

1,替换功能

1.[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/' test |grep tank  

2. tankzhang:

x:

0:

0:

root:

/root:

/bin/bash  

[zhangy@BlackGhostmytest]#sed's/root/tankzhang/'test|greptank

tankzhang:

x:

0:

0:

root:

/root:

/bin/bash

上面的这个例子,把test文件中的root替换成tankzhang,只不过只替换一次及终止在这一行的操作,转到下一行

1.[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/g' test |grep zhang  

2. tankzhang:

x:

0:

0:

tankzhang:

/tankzhang:

/bin/bash  

3. zhangy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash  

4. ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash  

5. @zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash  

[zhangy@BlackGhostmytest]#sed's/root/tankzhang/g'test|grepzhang

tankzhang:

x:

0:

0:

tankzhang:

/tankzhang:

/bin/bash

zhangy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash

ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash

@zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash

上面这个例子,用tankzhang把文件test中的root全部替换掉,请注意g这个字母,global的缩写

1.[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/p' test  

2. tankzhang:

x:

0:

0:

root:

/root:

/bin/bash  

[zhangy@BlackGhostmytest]#sed-n's/root/tankzhang/p'test

tankzhang:

x:

0:

0:

root:

/root:

/bin/bash

加了-np后表示只打印那些发生替换的行(部分替换),上面的例子,我并没有加上grep

1.[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/pg' test  

2. tankzhang:

x:

0:

0:

tankzhang:

/tankzhang:

/bin/bash  

[zhangy@BlackGhostmytest]#sed-n's/root/tankzhang/pg'test

tankzhang:

x:

0:

0:

tankzhang:

/tankzhang:

/bin/bash

加了-npg后表示只打印那些发生替换的行(全部替换),上面的例子,我并没有加上grep

1.[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/^zhang/ying/gp'  

2. yingy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash  

[zhangy@BlackGhostmytest]#cattest|sed-ne'2,8s/^zhang/ying/gp'

yingy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash

在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,并显示替换的行

1.[zhangy@BlackGhost mytest]# cat test | sed –n'2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp' 

2.yingy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash  

3.goodbay:

x:

81:

81:

System message bus:

/:

/bin/false  

[zhangy@BlackGhostmytest]#cattest|sed-n'2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp'

yingy:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash

goodbay:

x:

81:

81:

Systemmessagebus:

/:

/bin/false

当有多个命令要执行时,可以用分号来分开,并且分隔符可以自定义,默认是/。

上面的例子意思是在2,到8行之间,替换以zhang开头的行,用ying来替换,在5,到10间,用goodbay来替换dbus,并显示替换的行

1.[zhangy@BlackGhost mytest]# cat test|sed -ne '2,8s/zhang/ying/gp' –ne'5,10s#dbus#goodbay#gp'

2.yingy:

x:

1000:

100:

,,:

/home/yingy:

/bin/bash  

3.goodbay:

x:

81:

81:

System message bus:

/:

/bin/false  

[zhangy@BlackGhostmytest]#cattest|sed-ne'2,8s/zhang/ying/gp'-ne'5,10s#dbus#goodbay#gp'

yingy:

x:

1000:

100:

,,:

/home/yingy:

/bin/bash

goodbay:

x:

81:

81:

Systemmessagebus:

/:

/bin/false

这个例子根上面的那个例子一样,只不过有一点不同,那就是-e来充当了分号的作用,-e也能分割多个命令。

1.[zhangy@BlackGhost mytest]# sed -ne '2,8s/^\(zhangy\)/\1ing/gp' test  

2. zhangying:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash  

[zhangy@BlackGhostmytest]#sed-ne'2,8s/^\(zhangy\)/\1ing/gp'test

zhangying:

x:

1000:

100:

,,:

/home/zhangy:

/bin/bash

正则的用法,在sed里面用括号的话要加上\的,不然会报错的,zhangy被标记为1,替换为zhangying

1.[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhang/&ying/gp' test  

2. zhangyingy:

x:

1000:

100:

,,:

/home/zhangyingy:

/bin/bash  

3. ba:

x:

1002:

1002:

:

/home/zhangyingy:

/bin/bash  

4. @zhangyingying:

*:

1004:

1004:

:

/home/test:

/bin/bash  

[zhangy@BlackGhostmytest]#sed-ne'2,15s/zhang/&ying/gp'test

zhangyingy:

x:

1000:

100:

,,:

/home/zhangyingy:

/bin/bash

ba:

x:

1002:

1002:

:

/home/zhangyingy:

/bin/bash

@zhangyingying:

*:

1004:

1004:

:

/home/test:

/bin/bash

&的用处是,在找到的字符串后加上&后面的字符串,zhang后都加上了ying

1.[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test  

2. yingy:

x:

1000:

100:

,,:

/home/yingy:

/bin/bash  

3. ba:

x:

1002:

1002:

:

/home/yingy:

/bin/bash  

4. @yingying:

*:

1004:

1004:

:

/home/test:

/bin/bash  

[zhangy@BlackGhostmytest]#sed-ne'/^zhang/,/Po/s/zhang/ying/gp'test

yingy:

x:

1000:

100:

,,:

/home/yingy:

/bin/bash

ba:

x:

1002:

1002:

:

/home/yingy:

/bin/bash

@yingying:

*:

1004:

1004:

:

/home/test:

/bin/bash

上面的这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换

1.[zhangy@BlackGhost mytest]$ sed  '/root/{n;s/bin/tank/}' test  

2. root:

x:

0:

0:

root:

/root:

/bin/bash  

3. tank:

x:

1:

1:

bin:

/bin:

/bin/false  

[zhangy@BlackGhostmytest]$sed'/root/{n;s/bin/tank/}'test

root:

x:

0:

0:

root:

/root:

/bin/bash

tank:

x:

1:

1:

bin:

/bin:

/bin/false

n;这里的n是next的缩写,找到root的行后,将其下一行的中的bin换成tank

1.[zhangy@BlackGhost mytest]$ sed -e '1,2y/root/ROOT/' test  

2. ROOT:

x:

0:

0:

ROOT:

/ROOT:

/bin/bash  

3. bin:

x:

1:

1:

bin:

/bin:

/bin/false  

[zhangy@BlackGhostmytest]$sed-e'1,2y/root/ROOT/'test

ROOT:

x:

0:

0:

ROOT:

/ROOT:

/bin/bash

bin:

x:

1:

1:

bin:

/bin:

/bin/false

y的作用是将匹配的字符换成大写,不过替换字符和被替换字符长度要一样

1.[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '$G' test  

2.  

3.................................  

4.  

5..............................  

6.  

7.ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash  

8. test:

x:

1003:

1003:

:

/home/test:

/bin/bash  

9. @zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash  

10.  

11.root:

x:

0:

0:

root:

/root:

/bin/bash  

[zhangy@BlackGhostmytest]$sed-e'/root/h'-e'$G'test

................................

.............................

ba:

x:

1002:

1002:

:

/home/zhangy:

/bin/bash

test:

x:

1003:

1003:

:

/home/test:

/bin/bash

@zhangying:

*:

1004:

1004:

:

/home/test:

/bin/bash

root:

x:

0:

0:

root:

/root:

/bin/bash

这个例子中,h的作用是将找到的行,放到一个缓存区,G的作用是将缓存区中的内容放到最后一行。

1.[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '/zhangy/g' test  

2. root:

x:

0:

0:

root:

/root:

/bin/bash  

3. bin:

x:

1:

1:

bin:

/bin:

/bin/false  

4. daemon:

x:

2:

2:

daemon:

/sbin:

/bin/false  

5. mail:

x:

8:

12:

mail:

/var/spool/mail:

/bin/false  

6. ftp:

x:

14:

11:

ftp:

/home/ftp:

/bin/false  

7. &nobody:

$:

99:

99:

nobody:

/:

/bin/false  

8. root:

x:

0:

0:

root:

/root:

/bin/bash  

9. http:

x:

33:

33:

:

/srv/http:

/bin/false  

10. dbus:

x:

81:

81:

System message bus:

/:

/bin/false  

11. hal:

x:

82:

82:

HAL daemon:

/:

/bin/false  

12. mysql:

x:

89:

89:

:

/var/lib/mysql:

/bin/false  

13. aaa:

x:

1001:

1001:

:

/home/aaa:

/bin/bash  

14. root:

x:

0:

0:

root:

/root:

/bin/bash  

15. test:

x:

1003:

1003:

:

/home/test:

/bin/bash  

16. root:

x:

0:

0:

root:

/root:

/bin/bash  

[zhangy@BlackGhostmytest]$sed-e'/root/h'-e'/zhangy/g'test

root:

x:

0:

0:

root:

/root:

/bin/bash

bin:

x:

1:

1:

bin:

/bin:

/bin/false

daemon:

x:

2:

2:

daemon:

/sbin:

/bin/false

mail:

x:

8:

12:

mail:

/var/spool/mail:

/bin/false

ftp:

x:

14:

11:

ftp:

/home/ftp:

/bin/false

&nobody:

$:

99:

99:

nobody:

/:

/bin/false

root:

x:

0:

0:

root:

/root:

/bin/bash

http:

x:

33:

33:

:

/srv/http:

/bin/false

dbus:

x:

81:

81:

Systemmessagebus:

/:

/bin/false

hal:

x:

82:

82:

HALdaemon:

/:

/bin/false

mysql:

x:

89:

89:

:

/var/lib/mysql:

/bin/false

aaa:

x:

1001:

1001:

:

/home/aaa:

/bin/bash

root:

x:

0:

0:

root:

/root:

/bin/bash

test:

x:

1003:

1003:

:

/home/test:

/bin/bash

root:

x:

0:

0:

root:

/root:

/bin/bash

行替换,用匹配root的行,来替换匹配zhangy的行

1.[zhangy@BlackGhost mytest]$ sed -e 's/bin/tank/g;3q' test  

2. root:

x:

0:

0:

root:

/root:

/tank/bash  

3. tank:

x:

1:

1:

tank:

/tank:

/tank/false  

4. daemon:

x:

2:

2:

daemon:

/stank:

/tank/false  

[zhangy@BlackGhostmytest]$sed-e's/bin/tank/g;3q'test

root:

x:

0:

0:

root:

/root:

/tank/bash

tank:

x:

1:

1:

tank:

/tank:

/tank/false

daemon:

x:

2:

2:

daemon:

/stank:

/tank/false

3q的意思是到第三行的时候,退出

1.[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhangy.*[[:

digit:

]]/=======/gp'  test  

2. =======:

,,:

/home/zhangy:

/bin/bash 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2