前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9.5 sed(下)

9.5 sed(下)

作者头像
运维小白
发布2018-02-06 11:27:46
8410
发布2018-02-06 11:27:46
举报
文章被收录于专栏:运维小白运维小白

sed工具

  • sed '1'd test.txt
  • sed '1,3'd test.txt
  • sed '/oot/'d test.txt
  • sed '1,2s/ot/to/g' test.txt
  • sed 's#ot#to#g' test.txt
  • sed 's/[0-9]//g' test.txt
  • sed 's/[a-zA-Z]//g' test.txt
  • sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt
  • sed 's/^.*$/123&/' test.txt
  • sed -i 's/ot/to/g' test.txt

sed命令删除指定的行

  • sed '1,20'd test.txt //删除指定的行(但实质并未删除,只是将剩余的行列出来——>使用wc -l命令可查看原有的行并未删除)
代码语言:javascript
复制
[root@hf-01 sed]# sed '1,20'd test.txt
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
asfhan
dannnnnn
hhhhhao
[root@hf-01 sed]# wc -l test.txt
26 test.txt
  • sed -i '1,20'd test.txt //删除指定的行(在加了-i参数后,会把文件内容删除)
代码语言:javascript
复制
[root@hf-01 sed]# cp test.txt test.txt.bak
[root@hf-01 sed]# sed -i '1,20'd test.txt
[root@hf-01 sed]# wc -l test.txt
6 test.txt
[root@hf-01 sed]# 

  • 总结,sed删除指定的行
  • 在直接 sed '1,20'd test.txt 仅仅是剩余的行列出到屏幕上,而其他的行不列,并未删除文件
  • 而在加了 -i 参数后,sed -i '1,20'd test.txt 会把文件内容删除更改

sed命令 指定内容删除

  • sed -i '/sshd/'d test.txt //加了-i 参数后,会直接修改文件内容
代码语言:javascript
复制
[root@hf-01 sed]# sed -i '/sshd/'d test.txt    //会直接修改文件内容,删除sshd这一行
[root@hf-01 sed]# cat test.txt
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
asfhan
dannnnnn
hhhhhao
[root@hf-01 sed]# 

sed命令 查找替换 功能

  • sed 命令的查找替换和vim的查找替换相似
  • sed '1,5s/nologin/lala/g' test.txt //在1到5行中,把nologin替换成lala
    • 会把这个文件中所有内容都打印出来
    • g表示全局替换
代码语言:javascript
复制
[root@hf-01 sed]# sed '1,5s/nologin/lala/g' test.txt    //把文件中1到5行中的nologin替换成lala
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/lala
adas:124:bdsf:rto:pass
daemon:x:2:2:daemon:/sbin:/sbin/lala
dfdf:rggo:124
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
等等等,只截取了一部分
[root@hf-01 sed]# 
  • 正则表达式中查找替换
  • sed -r '1,5s/ro+/r/g' test.txt //将文件的1到5行中的ro+替换成r
    • 因为有特殊符号,所以得使用 -r 参数
    • (在使用cat test.txt的时候,会发现并没有真实替换,只是打印出在屏幕上替换了)
代码语言:javascript
复制
[root@hf-01 sed]# sed -r '1,5s/ro+/r/g' test.txt    //将文件的1到5行中的ro+替换成r
rt:x:0:0:rt:/rt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adas:124:bdsf:rto:pass
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dfdf:rggo:124
等等等,只截取了一部分

  • sed查找替换总结:
  • 若里面有特殊符号,则需要脱义 - 只能先使用-ri参数,而不能-ir参数(-r参数脱义特殊符号,-r参数直接修改文件内容) - 或者在特殊符号前面使用 \

sed命令 第一段和最后一段替换位置

  • head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 把文件的前10行的第一段和最后一段进行替换位置
    • head 默认查看前10行
    • s 前不指定范围,就表示全部
    • .* 表示贪婪匹配
代码语言:javascript
复制
[root@localhost sed]# head test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
对比
[root@localhost sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
[root@localhost sed]# 
  • 需求:把第一段和最后一段替换位置,因为内容是用 : 冒号分割的,所以可以使用 : 冒号作为分割对象
    • 前面用小括号括的内容,后面的就要用反斜杠 \ 加数字 去表示它

sed命令 将/root 替换成123 需要脱义

  • head tset.txt |sed 's//root/123/g' //在文件前5行,把/root 替换成 123
代码语言:javascript
复制
[root@localhost sed]# head test.txt |sed 's/\/root/123/g'
root:x:0:0:root:123:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost sed]#
  • 若替换的内容中有多个/ ,比如/sbin/nologin 替换成123
    • 则需要使用脱义符号 \ ,或者使用@
  • head test.txt |sed 's//sbin/nologin/123/g' //替换/sbin/nologin内容中有多个 /
代码语言:javascript
复制
[root@localhost sed]# head -n5 test.txt |sed 's/\/sbin\/nologin/123/g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
[root@localhost sed]# 
  • 也可以替换分隔符使用 @ 或者 # 替代——>只要可以去区分开就可以
代码语言:javascript
复制
[root@localhost sed]# head - n5 test.txt |sed 's@/sbin/nologin@123@g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123

[root@localhost sed]# head test.txt |sed 's#/sbin/nologin#123#g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
[root@localhost sed]# 

sed命令 删除文件中所有英文字母 's/[a-zA-Z]//g'

  • head -n5 test.txt |sed 's/[a-zA-Z]//g' //删除前5行中所有的英文字母
    • 只需要替换成 空 即可,就会删除所有的英文字母
代码语言:javascript
复制
[root@localhost sed]# head -n5 test.txt |sed 's/[a-zA-Z]//g'    //删除前5行中所有的英文字母
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
[root@localhost sed]# 

sed命令在 所有行前面加上字符串

  • head -n5 test.txt |sed -r 's/(.*)/aaa:&/' //在前5行中,所有行前面添加aaa字符
    • (.*) 表示一整行
    • &符号就表示前面的小括号
代码语言:javascript
复制
[root@localhost sed]# head -n5 test.txt |sed -r 's/(.*)/aaa:&/'    //在前5行中,所有行前面添加aaa字符
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin
aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost sed]# 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sed工具
    • sed命令删除指定的行
      • sed命令 指定内容删除
        • sed命令 查找替换 功能
          • sed命令 第一段和最后一段替换位置
            • sed命令 将/root 替换成123 需要脱义
              • sed命令 删除文件中所有英文字母 's/[a-zA-Z]//g'
                • sed命令在 所有行前面加上字符串
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档