当前位置:   article > 正文

sed的使用_sed -n命令

sed -n命令

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 遇到#或空行不删除
  • 1

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 (只显示结果 不会覆盖)

命令
aappend追加 在指定行的后面追加内容
iinsert插入 在指定行的前面插入内容
creplace替代 替代这行
[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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

企业案例中若要在一些配置文件最后追加几行的数据则我们可以
1.

cat >> xxxx.conf << 'EOF'
> 123
> 1231
> 212
> EOF
  • 1
  • 2
  • 3
  • 4
  • 5
sed '$a 123\n 1231\n 212' xxxx.conf
  • 1

2.3 s替换

替换格式
s###g
s@@@g
[root@foundation76 Desktop]# sed 's#[0-9]##g' 2 #将数字替换成空 
Awelcome nowcoder
Awelcome to nowcoder
Bnowcoder
###

lcf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/322974
推荐阅读
相关标签
  

闽ICP备14008679号