- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。
[root@localhost ~]# sed 【-nefr】 【动作】
参数;
-n:使用安静(silent)模式。在一般sed用法中,所有来自stdin的资料一般都会被列出到荧幕上,但如果
加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来。
-e:直接在指令列模式上进行sed的动作编辑。
-f:直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作。
-r:sed的动作支援的是延伸型正规表示法的语法。
-i:直接修改读取的档案内容,而不是由荧幕输出。
常用功能有下面这些参数;
a:新增,a的后面可以接字串,而这些字串会在新的一行出现;(目前的下一行)
c:取代,c的后面可以接字串,这些字符可以替换n1,n2之间的行!
d:删除,因为是删除,所有d后面通常不接任何参数;
i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p:打印,也就是将某个选择的数据打印出来。
s:替换,可以直接进行替换的工作。通常这个s的动作可以搭配正则表达式!列如 1,20s/old/new/g
以行为单位的删除与新增的功能。
新建一个文本文件 abc!
[root@localhost ~]# vim abc
1
2
3
4
5
[root@localhost ~]# nl /root/abc | sed '2,4d' //删除2~4行,所以显示的数据就没有2~5行。
1 1
5 5
[root@localhost ~]# nl /root/abc | sed '2a drink tea' //在第2行下新增一行
1 1
2 2
drink tea
3 3
4 4
5 5
#####如果我想在第2行下新增2行该怎么操作!
[root@localhost ~]# nl /root/abc | sed '2a drink tea....\
> drink beer?'
1 1
2 2
drink tea....
drink beer?
3 3
4 4
5 5
每一行必须以反斜杠“/” 来进行新行的新增。
以行为单位的替换与显示功能
[root@localhost ~]# nl /root/abc | sed '2,4c NO 2-5 number'
1 1
NO 2-5 number
5 5
通过这个方法我们就可以将数据整行替换了,以前想要列出第11~20行,得通过“head -n 20 | tail -n 10”之类的方法来处理,很麻烦。sed则可以简单直接取出你想要的那几行!
范例:仅列出/etc/passwd 文件内容的第5~7行。
[root@localhost ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
上述命令中有个重要的参数“-n”这个-n代表是“安静模式”那么为什么要使用安静模式,如果不加上-n参数 则/etc/passwd文件内的内容全部显示出来另外5~7会重复出现。
部分数据的查找并替换的功能
除了整行的处理模式之外,sed还可以用行为单位进行部分数据的查找并替换功能。
sed ‘s/要被替换的字符串/新的字符串/g’
范例:取得我们本机的IP地址数据。
步骤一:查看源信息,利用ifconfig 查询IP
[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:D3:37:5D
inet addr:192.168.1.94 Bcast:192.168.1.255 Mask:255.255.254.0
inet6 addr: fe80::20c:29ff:fed3:375d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:54487874 errors:0 dropped:0 overruns:0 frame:0
TX packets:46062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16847411440 (15.6 GiB) TX bytes:3436366 (3.2 MiB)
步骤二:利用关键字配合grep选取出关键的一行数据
[root@localhost ~]# ifconfig eth0 | grep 'inet addr'
inet addr:192.168.1.94 Bcast:192.168.1.255 Mask:255.255.254.0
步骤三:将IP前面的部分予以删除
[root@localhost ~]# ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.94 Bcast:192.168.1.255 Mask:255.255.254.0
步骤四:将IP后面的部分予以删除
[root@localhost ~]# ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast:.*$//g'
192.168.1.94
售前咨询
售后咨询
备案咨询
二维码
TOP