16. sed命令

出门莫恨无人随,书中车马多如簇。这篇文章主要讲述16. sed命令相关的知识,希望能为你提供帮助。
sed追加
sed可以把文本中的一些东西给改了
sed可以把文本中某些特定的部分改掉
set基本用法
格式

sed [option]... \'script; script; ...\' [inputfile...]

常用选项
-n 不输出模式空间内容到屏幕,即不自动打印 -e 多点编辑 -f FILE 从指定文件中读取编辑脚本 -r, -E 使用扩展正则表达式 -i.bak 备份文件并原处编辑 -s将多个文件视为独立文件,而不是单个连续的长文件流 #说明: -ir 不支持 -i -r 支持 -ri支持 -ni会清空文件

例1:
//打印第一行,由于默认执行的是自动打印,所以多打了一遍 [20:59:27 root@centos8] ~]#sed \'1p\' /etc/issue \\S \\S Kernel \\r on an \\m//-n取消了自动打印 [21:05:36 root@centos8] ~]#sed -n \'1p\' /etc/issue \\S

例2:sed打印eth0的ip地址
[21:06:02 root@centos8] ~]#ifconfig eth0 eth0: flags=4163< UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.8netmask 255.255.255.0broadcast 10.0.0.255 inet6 fe80::20c:29ff:fe79:6b19prefixlen 64scopeid 0x20< link> ether 00:0c:29:79:6b:19txqueuelen 1000(Ethernet) RX packets 4915bytes 494155 (482.5 KiB) RX errors 0dropped 0overruns 0frame 0 TX packets 24449bytes 2328029 (2.2 MiB) TX errors 0dropped 0 overruns 0carrier 0collisions 0 //sed打印第二行 [21:11:54 root@centos8] ~]#ifconfig eth0 | sed -n \'2p\' inet 10.0.0.8netmask 255.255.255.0broadcast 10.0.0.255

例3:sed打印seq的输出,分别为第7行和最后一行
[21:12:04 root@centos8] ~]#seq 10 | sed -n \'7p\' 7 //sed里面,$代表文本中的最后一行,在vi中$代表整个行的行尾 [21:17:19 root@centos8] ~]#seq 10 | sed -n \'$p\' 10

例4
#/^:sed里是输出以什么开头的,/^s/就是以s开头的 [21:17:31 root@centos8] ~]#sed -n \'/^s/p\' /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin sssd:x:984:984:User for sssd:/:/sbin/nologin setroubleshoot:x:979:978::/var/lib/setroubleshoot:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

例5 找以s开头开始,以h开头结尾的文件
sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt systemd-coredump:x:999:997:systemd Core //由于sed不可逆,它找不到以h为开头的了,所以会一直运行下去直到结束 Dumper:/:/sbin/nologin systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin

例6 步进:~【16. sed命令】1~2 奇数行
2~2 偶数行
//输出奇数 [09:24:36 root@centos8] ~]#seq 10 | sed -n \'1~2p\' 1 3 5 7 9 //输出偶数 [09:24:45 root@centos8] ~]#seq 10 | sed -n \'2~2p\' 2 4 6 8 10

例7 在第三行后面追加hello[09:41:54 root@centos8] ~]#seq 10 | sed \'3a hello\'
1
2
3
hello
4
5
6
7
8
9
10
......
例8.
script格式:
\'地址命令\'

地址格式:
1. 不给地址:对全文进行处理 2. 单地址: #:指定的行,$:最后一行 /pattern/:被此处模式所能够匹配到的每一行 3. 地址范围: #,##从#行到第#行,3,6 从第3行到第6行 #,+##从#行到+#行,3,+4 表示从3行到第7行 /pat1/,/pat2/ #,/pat/ /pat/,# 4. 步进:~ 1~2 奇数行 2~2 偶数行

命令
p 打印当前模式空间内容,追加到默认输出之后 Ip 忽略大小写输出 d 删除模式空间匹配的行,并立即启用下一轮循环 a [\\]text 在指定行后面追加文本,支持使用\\n实现多行追加 i [\\]text 在行前面插入文本 c [\\]text 替换行为单行或多行文本 w file 保存模式匹配的行至指定文件 r file 读取指定文件的文本至模式空间中匹配到的行后 = 为模式空间中的行打印行号 ! 模式空间中匹配行取反处理 q结束或退出sed

中划线
查找替代
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s### 替换修饰符: g 行内全局替换 p 显示替换成功的行 w/PATH/FILE 将替换成功的行保存至文件中 I,i忽略大小写


    推荐阅读