漫漫运维路——Linux文本处理三剑客之sed


Sed,即Stream EDitor的缩写,是Linux操作系统中常见的文本处理工具,可以结合正则表达式简单方便地对文本进行处理。本文将以实例的方式介绍sed的基本用法。

基本使用方法

基本语法:sed [OPTION] [AddressCommand] FILE1 FILE2......

OPTION{常用}

-n:静默模式,不显示模式空间

-i:直接修改源文件

-e SCRIPT -e SCRIPT:可以同时执行多个脚本

-f /APATH/TO/SED_FILE:从文件中读取脚本,执行

-r:表示支持扩展正则表达式

Adress

1.StartLineEndline

如:1,100

2./RegExp/

/^root/:匹配以root开始的行

/$/:最后一行

3./pattern1//pattern2/:从第一次被模式1匹配到的行到第一次被模式2匹配到的行

4.LineNumber

指定的行

5.StartLine+N

StartLine开始,向后的N

Command

d:删除匹配到的行

例:删除/etc/fstab文件中的前三行文本

[root@localhost tmp]# sed ‘1,+2d‘ /etc/fstab

p:显示符合条件的行,被匹配到的行会显示两次,未被匹配到的行只显示一次

例:只显示/etc/fstab文件中以#开头的行

[root@localhost tmp]# sed -n ‘/^#/p‘ /etc/fstab

a \string 在匹配到的行后面增加行

例:在文件/etc/fstab文件中以#开头的行后面插入hahah这一行

[root@localhost tmp]# sed ‘/^#/a\hahaha‘ /etc/fstab

i \string 用法同a,在符合条件的行前面添加新行

r FILE后接文件,在匹配到的行后读入文件中的内容

例:在/etc/fstab文件中的第一行和第二行读入文件/etc/passwd

[root@localhost tmp]# sed ‘1,2r/etc/passwd‘ /etc/fstab 

w FILE:将地址指定的范围内的行另存至指定的文件中

例:将温江/etc/fstab中的第一行和第二行保存到/tmp/fstab文件中

[root@localhost tmp]# sed ‘1,2w/tmp/fstab‘ /etc/fstab

s/pattern/string/[修饰符:查找替换,默认只替换每行中第一次被模式匹配到的字符串

修饰符:

g:全局替换

i:忽略大小写

例:把文件test.txt中以o结尾的字符后面加d

[root@localhost tmp]# sed ‘s@\(o$\)@\1d@g‘ test.txt

例:去掉history命令的行首的所有空格

[root@localhost tmp]# history | sed ‘s@^[[:space:]]*@@g‘

综合实例

1:删除/etc/grub.conf文件中行首的空白字符

[root@localhost tmp]# sed ‘s@^[[:space:]]*@@‘ /etc/grub.conf


技术分享

 

2:替换/etc/inittab文件中id3initdefault一行中的数字为5

[root@localhost tmp]# sed ‘s/id:3:initdefault:\(.*\)/id:5:initdefault"\1/g‘ /etc/inittab


技术分享

3:删除/etc/inittab文件中的空白行

[root@localhost tmp]# sed ‘/^$/d‘ /etc/inittab


技术分享

 

4:删除/etc/inittab文件中开头的#

[root@localhost tmp]# sed ‘s/^#//‘ /etc/inittab


技术分享

 

5:删除某文件中开头的#号但要求#号后面必须有空白字符

原文件内容如下


技术分享

 

[root@localhost tmp]# sed ‘s/#*\([[:space:]]\+\)/\1/‘ test.txt


技术分享

 

6:删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#


技术分享

7:取出一个文件路径的目录名称

[root@localhost tmp]# echo "/etc/yum.repo/new.repo" | sed ‘s@/.*/\(.*\)/.*@\1@‘


技术分享

 

 

 

 


本文出自 “linux-冒泡” 博客,请务必保留此出处http://7703592.blog.51cto.com/7693592/1651433

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。