加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式之sed

发布时间:2020-12-13 19:38:04 所属栏目:百科 来源:网络整理
导读:1.sed 是一个非交互式文本编辑器,基本用法 sed参数‘指令’文件 常用参数有: -n:安静模式,sed默认会打印出文本中的所有行,加上-n参数表示只打印指定的行 [root@zhu1 ~]# sed '1p' zhu.txtming yue ji shi you.ming yue ji shi you.ba jiu wen qing tian

1.sed是一个非交互式文本编辑器,基本用法

sed参数‘指令’文件

常用参数有:

-n:安静模式,sed默认会打印出文本中的所有行,加上-n参数表示只打印指定的行

[root@zhu1 ~]# sed '1p' zhu.txt
ming yue ji shi you.
ming yue ji shi you.
ba jiu wen qing tian
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man
[root@zhu1 ~]# sed -n '1p' zhu.txt
ming yue ji shi you.

-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e可以省略

-f:调用sed脚本文件

-r:sed动作支持延伸正规表示法,默认仅支持基础正规表示法

-i:直接修改读取档案的内容,而不是由屏幕输出

2.sed命令中定位文本行的方法

x:x为指定的行号

x,y:指定行号的范围,2,5:表示从第二行到第5行

/pattern/:表示包含模式的行

/pattern/pattern/:表示包含两个模式的行

/pattern/,x:从匹配模式的行到x行之间的行

x,/pattern/:表示从x行到匹配模式的行之间的行

x,y!:表示不在指定x行到y行之间的行

3.sed的编辑命令

p:打印出匹配的行

[root@zhu1 ~]# sed -n '2p' zhu.txt
ba jiu wen qing tian
[root@zhu1 ~]# sed -n '2'p zhu.txt
ba jiu wen qing tian

sed的基本编辑命令可以放在单引号内,也可以放在单引号外

=:打印文件的行号

[root@zhu1 ~]# sed -n '/yue/=' zhu.txt
1

a:在指定的行号的下一行添加内容

[root@zhu1 ~]# sed  '2 amingyue' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
mingyue
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man
[root@zhu1 ~]# sed  '2amingyue' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
mingyue
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man
[root@zhu1 ~]# sed  '2aming yue' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
ming yue
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man

[root@zhu1 ~]# sed  '2aming yue' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
ming yue
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man

总结:a:中可以不要,同时a和行号之间可以有空格也可以没有,添加的内容会在指定行的下一行

i:在定位行号的前一行添加内容

[root@zhu1 ~]# sed  '2imingyuexin' zhu.txt
ming yue ji shi you.
mingyuexin
ba jiu wen qing tian
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man

d:删除指定的行

[root@zhu1 ~]# sed  '2,4d' zhu.txt
ming yue ji shi you.
#an good man

c:替换,把指定的行替换为c后要替换的内容

[root@zhu1 ~]# sed  '2,4czhuzhu' zhu.txt
ming yue ji shi you.
zhuzhu
#an good man

s:替换,模式为:s/原字符/新字符串/g

[root@zhu1 ~]# sed 's/ming yue/zhujiangtao/g' zhu.txt
zhujiangtao ji shi you.
ba jiu wen qing tian
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man

s为对字符串进行替换,c为对匹配的文本行进行替换

r:从另一个文件中读文本,把另一个文件的内容添加到指定行的下一行

[root@zhu1 ~]# nl jiang.txt
1  NI KE ZHI DAO
2  wo de xin li
3  zhu
4  zhuzhu
[root@zhu1 ~]# sed '3r jiang.txt' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
bu zhi tian shang gong que goad
NI KE ZHI DAO
wo de xin li
zhu
zhuzhu
#jin xi shi he nian root oo*
#an good man

w:把指定的行,读取到另一个文件,相当于创建一个文件

[root@zhu1 ~]# sed '3w tianxia.sql' zhu.txt
ming yue ji shi you.
ba jiu wen qing tian
bu zhi tian shang gong que goad
#jin xi shi he nian root oo*
#an good man
[root@zhu1 ~]# nl tianxia.sql
1  bu zhi tian shang gong que goad

y:变换字符,模式:y/被变换的字符序列/变换的字符序列/

[root@zhu1 ~]# nl zhu.txt
1  ming yue ji shi you.
2  ba jiu wen qing tian
3  bu zhi tian shang gong que goad
4  #jin xi shi he nian root oo*
5  #an good man
[root@zhu1 ~]# sed 'y/mz/XX/' zhu.txt
Xing yue ji shi you.
ba jiu wen qing tian
bu Xhi tian shang gong que goad
#jin xi shi he nian root oo*

c:替换的是行

s:替换的是字符串

y:替换的是字母

{}:在定位行执行的命令组,对定位行执行多个编辑命令,相当于使用多个-e

[root@zhu1 ~]# sed -n -e '3,5p' -e '3,5=' zhu.txt
bu zhi tian shang gong que goad
3
#jin xi shi he nian root oo*
4
#an good man
5
[root@zhu1 ~]# sed -n '3,5{p;=}' zhu.txt
bu zhi tian shang gong que goad
3
#jin xi shi he nian root oo*
4
#an good man
5

{}内编辑指令用分号隔开

sed的常用情况以及与grep的结合用法

输出eth0的ip地址

[root@zhu1 ~]# ifconfig eth0| grep 'inet addr'
inet addr:192.168.1.107  Bcast:255.255.255.255  Mask:255.255.255.0
[root@zhu1 ~]# ifconfig eth0| grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.107  Bcast:255.255.255.255  Mask:255.255.255.0
[root@zhu1 ~]# ifconfig eth0| grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.107

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读