sed初学者实用说明

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

例如,在多个系统、应用程序安装之后,我们往往需要对很多配置文件进行修改,用vi编辑器意味着耗费时间、重复劳动,而sed就可将我们从繁重的重复劳动中解放出来。

sed的调用方式:

1、sed [sed选项] sed命令 要修改的文件

2、sed [sed选项] -f sed脚本 要修改的文件

3、sed脚本 [sed选项] 要修改的文件

这里仅介绍最常用的第一种方式

sed选项:仅列常用的

-i:直接修改源文件(不用这个选项的话无法直接修改,必须重定向到新文件,如果仅作为输出测试则不需此选项),还可将源文件修改前备份

sed -i.bak s/123/234/ test.txt 将test.txt备份为test.txt.bak,然后将文件内行第一个出现的“123”替换为“234”

-e:多次编辑,例如先将所有的123替换为234,再将第7行前加#号注释

sed -i -e s/123/234/g -i -e 7 s/^/#/ test.txt

-f:指定sed脚本文件名

-n:取消默认的输出(不打印),用sed不加任何选项的话你会看到所有内容输出,并不是按照sed命令所限制的条件输出,那么配合“p”命令经可以过滤掉不符合条件的行,并显示出符合条件的行,例如

sed -n 查找所有包含字符123的行p test.txt 或 sed -n 查找所有包含字符123的行p test.txt

sed命令:这里可以使用正则表达式,如遇特殊字符,需用“”来屏蔽其特殊含义,例如“$”表示普通的字符$

x x为某行行号

x,y 例如2,5,从第2行到第5行

/val/ 查询包含“val”字符的行

/val1/val2/ 查询包含两个模式的行

val/,x 在给定行号的行上查询包含“val”的行

x,/val/ 通过行号和模式查询匹配的行

x,y! 不包含指定行号x,y的行

p 打印匹配的行

= 显示行号

a 在定位了的行之后附加内容

i 在定位了的行之后插入内容

d 删除定位的行,例如:2d 代表删除第2行

c 用新文本替换定位行的文本

s 替换,形式为:s/查找的内容/替换的内容/

g 进行全局替换,如不使用此选项将只对该行匹配到的第一个结果进行替换,该行下一个匹配的就不处理了。

…其他就不介绍了,百度搜下吧

实例学习:

test.txt文件内容为

The honeysuckle band played all night long for only $90

It was an evening of splendid music and company

Too bad the disco floor fell through at 23:10

The local nurse Miss P.Neave was in attendance

1、显示第2行的内容

sed -n 2p test.txt

2、显示第1到3行的内容

sed -n 1,3p test.txt

3、仅显示包含“disco”的行

sed -n /disco/p test.txt

4、显示包含“$”字符的行

sed -n /$/p test.txt

5、显示以数字结尾的行,[0-9]是正则表达式 代表数字0到9;“$”表示行尾(“^”表示行首)

sed -n /[0-9]$/p test.txt

显示结果为:

The honeysuckle band played all night long for only $90

Too bad the disco floor fell through at 23:10

6、显示以数字结尾的行并显示以大写T为开头的行

sed -n -e /^T/p -e /[0-9]$/p test.txt

7、匹配任意字母、后跟任意字母的多次重复,并以“ing”结尾的行

sed -n /.*ing/p test.txt

8、第一行与最后一行

sed -n 1p test.txt

sed -n $p test.txt

9、将“nurse”改为“little nurse”,“&”命令用来重新调用被替换的内容

sed -n s/nurse/little &/p test.txt

10、先将所有的123替换为234,再将第7行前加#号注释

sed -i -e s/123/234/g -i -e 7 s/^/#/ test.txt

11、将“——–”删除,将空行删除,将第一行和最后一行删除,并打印第一列

文件内容:

Database Size(MB) Date Created

——————————————

mysql 2244 12/11/08

test 5632 12/11/08

(2 rows affected)

命令:

cat test.txt | sed s/–*//g | sed /^$/d | sed $d | sed 1d | awk {print $1}

显示结果:

mysql

test

说明:

使用s/–*//g删除横线——-

使用/^$/d删除空行

使用$d删除最后一行

使用1d删除第一行

awk {print $1}打印第一列

12、一些杂项例子

^[0-9]表示行第一个字符为任意数字,例如“1asdf”;

^[0-9]*表示行首包含任意个数的数字,例如“1818asdf”

[0-9][0-9]*$表示行尾包含至少2个数字,例如“asdfasdf18”“asdf1818”

sed -i s/^[0-9]*//g test.txt 删除行首的任意数字

sed -i -e s/^[0-9]*//g -i -e s/$/& passed/ test.txt 删除行首任意数字,并在每行结尾加上“ passed”

sed -i -e s/^/#& test.txt 给每行行首加上“#”注释

s/.$//g 删除以句点结尾的行的句点

s/^[ ][ ]*// 删除行首的任意个空格

s/^.// 删除行首的第一个字符

s/^/// 删除行首的“/”字符

s/SP(..)//g 删除字符“SP”以及紧跟其后的两个任意字符,“SPLLY”–>“Y”
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容