设为首页 收藏本站
查看: 1037|回复: 0

shell编程学习之sed

[复制链接]

尚未签到

发表于 2018-8-22 06:04:37 | 显示全部楼层 |阅读模式
  sed
  sed是流编辑器,是一个过滤工具,处理行
  1、sed参数
  p 打印匹配行
  = 显示文件行号
  a / 在定位行号后附加新文本信息
  i / 在定位行号后插入新文本信息
  d 删除定位行
  c / 用新文本替换定位文本
  s 使用替换模式替换相应模式
  r 从另一个文件中读文本
  w 写文本到一个文件
  q 第一个模式匹配完成后推出或立即推出
  l 显示与八进制A S C I I代码等价的控制字符
  { } 在定位行执行的命令组
  n 从另一个文件中读文本下一行,并附加在下一行
  g 将模式2粘贴到/pattern n/
  y 传送字符
  n 延续到下一输入行;允许跨行的模式匹配语句
  2、替换一个或者多个
  [test@linux-3 ~]# sed '1s/a/c/' 1.txt
  [test@linux-3 ~]# cat 1.txt
  a
  a
  a
  b
  [test@linux-3 ~]# sed '1s/a/c/' 1.txt
  c
  a
  a
  b
  [test@linux-3 ~]# sed 's/a/c/g' 1.txt
  c
  c
  c
  b
  3、打印1到3行
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed -n '1,3p' 1.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
  4、删除1到3行
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed  '1,3d' 1.txt    #命令
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  5、选取一个范围
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed -n '/root/,/2/p' 1.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
  6、删除第二行(包括第二行)后面的行
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed '2,$d' 1.txt        #命令
  root:x:0:0:root:/root:/bin/bash
  7、删除包括某个字符所有的行
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed '/nologin/d' 1.txt  #命令
  root:x:0:0:root:/root:/bin/bash
  8、匹配类型:0000:11或者0000:12  生日号
  [test@linux-3 ~]# cat 3.txt
  1986:10 aaaaa
  1977:1  bbbbb
  1986:11 aaaaa
  1979:1  bbbbb
  1977:12 bbbbb
  1986:12 aaaaa
  [test@linux-3 ~]# sed -ne '/[0-9]\{4\}\:1[12]/p' 3.txt
  1986:11 aaaaa
  1977:12 bbbbb
  1986:12 aaaaa
  9、在某个字符前面加#号,一般用于配置注释
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed 's/root/#&/' 1.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
  10、删除第一和第二行,并在daemon前面加上#号
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed -e '1,2d' -e 's/daemon/#&/' 1.txt
  #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
  11、在某个字符后面读入另一文件
  [test@linux-3 ~]# cat 1.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
  [test@linux-3 ~]# sed '/daemon/r 3.txt' 1.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
  1986:10 aaaaa
  1977:1  bbbbb
  1986:11 aaaaa
  1979:1  bbbbb
  1977:12 bbbbb
  1986:12 aaaaa
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  12、匹配到并写入到另一个文件,但被写放的文件会被覆盖
  [root@linux-3 ~]# cat 3.txt
  root:x:0:0:root:/root:/bin/bash
  [root@linux-3 ~]# sed -n '/daemon/w 3.txt' 1.txt
  [root@linux-3 ~]# cat 3.txt
  daemon:x:2:2:daemon:/sbin:/sbin/nologin
  13、匹配某个字符再追加,一般在匹配的后面追加
  [root@linux-3 ~]# sed '/root/a test test' 1.txt
  root:x:0:0:root:/root:/bin/bash
  test test
  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
  14、匹配后插入,一般在匹配的前面插入
  [root@linux-3 ~]# sed '/^daemon/i test test' 1.txt
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  test test
  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
  15、匹配以test开头,修改1234/1234/13456变成12/13/476
  [root@linux-3 ~]# cat txt
  test 1234/1234/13456
  yoyo abcd/EFGH/MJKL
  [root@linux-3 ~]# sed -n '/^test/p' txt |sed 's/[0-9]\{4\}\/[0-9]\{4\}\/[0-9]\{4\}/12\/13\/47/'
  test 12/13/476
  16、同样以txt为例,匹配yoyo,修改 abcd/EFGH/MJKL变成aaaa:aaaa:aaaa
  [root@linux-3 ~]# cat txt
  test 1234/1234/13456
  yoyo abcd/EFGH/MJKL
  [root@linux-3 ~]# sed -n '/^yoyo/p' txt | sed 's/[a-z]\{4\}\/[A-Z]\{4\}\/[A-Z]\{4\}/aaaa\:aaaa\:aaaa/'
  yoyo aaaa:aaaa:aaaa
  17、删除空格以及空白行
  [root@linux-3 ~]# cat txt
  test 1234/1234/13456
  yoyo abcd   /EFGH/MJKL
  [root@linux-3 ~]# sed 's/[[:space:]]//g' txt     #删除空格
  test1234/1234/13456
  yoyoabcd/EFGH/MJKL
  [root@linux-3 ~]# sed 's/[[:space:]]//g' txt|sed '/^$/d'  #删除空格以及空白行
  test1234/1234/13456
  yoyoabcd/EFGH/MJKL
  18、除了nologn结尾的,其他删除
  [root@linux-3 ~]# sed '/nologin$/! d' 1.txt
  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
  19、小写变成大写
  [root@linux-3 ~]# sed 'y/root/ROOT/' 1.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
  20、打印第三行后面所有字符
  [root@linux-3 ~]# sed '3q' 1.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
  21、root这个单词用[  ]括起来
  [root@linux-3 ~]# cat 1.txt | sed 's/root\+/[&]/g'
  [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
  22、查找出root开头的,并把所有单词使用[  ]括起来
  [root@linux-3 ~]# sed -n '/^root/p' 1.txt | sed 's/\w\+/[&]/g'
  [root]:[x]:[0]:[0]:[root]:/[root]:/[bin]/[bash]
  23、在指定行插入
  [root@linux-3 ~]# sed '2i test' 1.txt
  root:x:0:0:root:/root:/bin/bash
  test
  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
  24、在前面加上test  这个单词
  [root@linux-3 ~]# sed 's/^/test /' 1.txt
  test root:x:0:0:root:/root:/bin/bash
  test bin:x:1:1:bin:/bin:/sbin/nologin
  test daemon:x:2:2:daemon:/sbin:/sbin/nologin
  test adm:x:3:4:adm:/var/adm:/sbin/nologin
  test lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  25、在后面加上  test这个单词
  [root@linux-3 ~]# sed 's/$/ test/' 1.txt
  root:x:0:0:root:/root:/bin/bash test
  bin:x:1:1:bin:/bin:/sbin/nologin test
  daemon:x:2:2:daemon:/sbin:/sbin/nologin test
  adm:x:3:4:adm:/var/adm:/sbin/nologin test
  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin test
  26、只在单词nologin所在的行后面加上 test这个单词
  [root@linux-3 ~]# cat 1.txt |sed -n '/nologin$/p' | sed -e 's/$/ test/'
  bin:x:1:1:bin:/bin:/sbin/nologin test
  daemon:x:2:2:daemon:/sbin:/sbin/nologin test
  adm:x:3:4:adm:/var/adm:/sbin/nologin test
  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin test


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554788-1-1.html 上篇帖子: linux shell之case用法 下篇帖子: Shell编程之通配符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表