1 sed -n 只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出)
1.1 查找显示p
一般格式:sed -n ****
查找格式 | |
---|---|
‘2p’ | 打印、显示第二行 |
‘1,5p’ | '4,$p’第四行到最后一行 |
‘/lcf/p’ | 类似于grep过滤,//里面可以写正则 |
‘/10:00/,/11:00/p’ | 表示范围的过滤 |
‘1,/lcf/p’ | 混合查找 |
其中表示范围的时候 如果结尾的内容匹配不到就显示到最后。
需要用到正则表达式时要用sed -nr
!的 妙用 (取反)
sed -nr /^$|#/!p 3.txt 遇到#或空行不删除
2. sed
2.1 删除 行 d(删除字符需要用替换)
一般格式:sed *****
查找格式 | |
---|---|
‘2d’ | 删除第二行 |
‘1,5d’ | ‘4,$p’ 第四行到最后一行 |
‘/lcf/d’ | 类似于grep过滤,//里面可以写正则 |
‘/10:00/,/11:00/d’ | 表示范围的删除 |
‘1,/lcf/d’ | 混合查找 |
2.2 增加 cai (只显示结果 不会覆盖)
命令 | |
---|---|
a | append追加 在指定行的后面追加内容 |
i | insert插入 在指定行的前面插入内容 |
c | replace替代 替代这行 |
[root@foundation76 Desktop]# cat 2
Awelcome nowcoder2121
Awelcome to nowcoder121
Bnowcoder11255
###
[root@foundation76 Desktop]# sed '2a lcfnb' 2
Awelcome nowcoder2121
Awelcome to nowcoder121
lcfnb
Bnowcoder11255
###
[root@foundation76 Desktop]# sed '2i lccccccfnb' 2
Awelcome nowcoder2121
lccccccfnb
Awelcome to nowcoder121
Bnowcoder11255
###
[root@foundation76 Desktop]# sed '2c lccsssssssccccfnb' 2
Awelcome nowcoder2121
lccsssssssccccfnb
Bnowcoder11255
###
企业案例中若要在一些配置文件最后追加几行的数据则我们可以
1.
cat >> xxxx.conf << 'EOF'
> 123
> 1231
> 212
> EOF
sed '$a 123\n 1231\n 212' xxxx.conf
2.3 s替换
替换格式 |
---|
s###g |
s@@@g |
[root@foundation76 Desktop]# sed 's#[0-9]##g' 2 #将数字替换成空
Awelcome nowcoder
Awelcome to nowcoder
Bnowcoder
###
lcf
其中g为global全局替换 没有g的话只替换每行第一个匹配的内容
2.3.1 sed 的反向引用
口诀:先保护,在使用
意思是说前面部分#内用()阔起来 后面#用转译符号作修改
[root@foundation76 Desktop]# echo lcf_smy |sed -r 's#(.*)#<\1>#g' #添加<>
<lcf_smy>
[root@foundation76 Desktop]# echo lcf_smy | sed -r 's#(^\w+)_(\w+$)#\2_\1#g' #互换位置
smy_lcf
#其中\w代表 [0-9a-zA-Z]
# \2 代表后面的
# \1 代表前面的
[root@foundation76 Desktop]# ip addr show br0 |sed -n '3p'
inet 172.25.254.76/24 brd 172.25.254.255 scope global noprefixroute br0
[root@foundation76 Desktop]# ip addr show br0 |sed -n '3p' | sed -r 's#^.*t (.*)/.*$#\1#g' #取ip
172.25.254.76
[root@foundation76 Desktop]# ip addr show br0 |sed -rn '3s#^.*t (.*)/.*$#\1#gp' #合并
172.25.254.76
#其中's#^.*t (.*)/.*$#\1#g'是
#^.*t 任意开头到t空格
#(.*) 保护好我们需要的
#/.*$ /开头任意到结束
[root@foundation76 Desktop]# stat /etc/hosts
File: /etc/hosts
Size: 410 Blocks: 8 IO Block: 4096 regular file
Device: 10307h/66311d Inode: 167797011 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-21 14:57:53.827785430 +0800
Modify: 2022-03-08 14:57:53.470149574 +0800
Change: 2022-03-08 14:57:53.479149531 +0800
Birth: -
[root@foundation76 Desktop]# stat /etc/hosts |sed -nr '4s#^.*\(0(.*)/-.*#\1#gp' #提权
644
#其中:
#^.*\(0(.*)/-.*
#\(0 中的小括号需要用\转译符号消除特殊含义
[root@foundation76 Desktop]# stat /etc/hosts |grep -o 644 这样也行
644
[root@foundation76 Desktop]# stat -c%a /etc/hosts
644
[root@foundation76 Desktop]# sed '=' 2 #在每行前一行插入行号
1
Awelcome nowcoder2121
2
Awelcome to nowcoder121
3
Bnowcoder11255
4
###
5
6
lcf
7
12
8
2
[root@foundation76 Desktop]# sed '=' 2 |sed 'N;s#\n# #g' #显示行号 其中:N;是提前读取
1 Awelcome nowcoder2121
2 Awelcome to nowcoder121
3 Bnowcoder11255
4 ###
5
6 lcf
7 12
8 2