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.8  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe79:6b19  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:79:6b:19  txqueuelen 1000  (Ethernet)
        RX packets 4915  bytes 494155 (482.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24449  bytes 2328029 (2.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
//sed打印第二行
[21:11:54 root@centos8] ~]#ifconfig eth0 | sed -n '2p'
        inet 10.0.0.8  netmask 255.255.255.0  broadcast 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 步进:~

  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  忽略大小写