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

shell-sed

[复制链接]

尚未签到

发表于 2018-8-23 13:08:04 | 显示全部楼层 |阅读模式
  sed     stream   edit  非交互式 对文件做编辑的工具
  语法格式
  sed   [选项]  '动作'   文件列表
  sed   [选项]  '条件动作'   文件列表
  以行为处理单位  一次处理一行  逐行处理
  默认把处理结果输出到屏幕
  +++++++++++++++++++++++++++++++++++++++++++++++
  选项:
  -n    #屏蔽默认输出
  -i  直接修改文件内容
  -f 使用sed脚本
  +++++++++++++++++++++++++
  vim  test.sed
  s/haha/xixi
  s/[0-9]//g
  ........
  :wq
  sed  -f   test.txt    a.txt
  +++++++++++++++++++++++++
  -e 可指定多个处理动作
  -r  启用扩展的正则表达式,若与其他选项一起用应作为首个选项
  {}  可组合多个命令,以分号分隔
  处理动作:
  p打印行
  2,4p  输出第234行
  2p;4p 输出第2和第4行
  d删除行 (删除一行)
  2,4d 删除第234行
  s 字符串替换
  s/old/new  将每行的第一个old替换为new
  s/old/new/3  将每行的第3个old替换为new
  s/old/new/g  将所有的old替换为new
  ++++++++++++++++++++++++++++++++++++++++++++
  p打印行
  sed 'p' a.txt               输出所有行不屏蔽默认输出(出现两遍内容)
  sed -n  'p' a.txt            输出所有行 sed -n  '3p' a.txt
  cat -b a.txt
  sed  -n '3p' a.txt            输出第三行
  sed  -n '3,5p' a.txt           输出345行
  sed  -n '$p' a.txt               输出最后一行
  sed  -n '1p;5p;$p' a.txt      输出1,5,和最后一行
  sed  -n '/^r/p' a.txt      输出以r开头的行
  sed  -n '/h$/p' a.txt     输出以h结尾的行
  sed  -n '/h/p' a.txt         输出带h的行
  sed -n 'p;p;p' a.txt        把每行内容输出3次
  sed -n '3,+10p'  a.txt  输出第3行及其后10行的内容
  sed -n  'p;n' a.txt       输出奇数行,n表示读入下一行文本(隔行)
  sed -n 'n;p' a.txt       输出偶数行,n表示读入下一行文本(隔行)
  sed  -n  '$='   a.txt            输出文件的行数
  sed -n  '10,${n;p}' a.txt   输出第10行到最后一行所有的偶数行
  ---------------------------------------------------------------------
  d删除行 (删除一行)  不带-i不修改原文件
  sed  '1d'  a.txt    删除第一行
  sed  '$d'  a.txt    删除最后一行
  sed  '1,3d'  a.txt   删除第123行
  sed  '/r/d'   a.txt  删除包含r的行
  sed '/r/!d' a.txt    删除不包含r的行
  sed '/^r/d' a.txt    删除以r开头的行
  sed   '/^$/d'  a.txt   删除所有空行
  sed  '/^$/{n;/^$/d}'   删除重复空行,连续两个空行只保留一个
  sed  '/^[rds]/d' a.txt   删除分别以r,d,s开头的行
  sed  -i   '$d' /etc/passwd  删除文件的最后一行,修改原文件
  ----------------------------------------------------------------------
  a/i添加行  (添加一行)
  a  在当前行下方添加新行
  i   在当前行上方添加新行
  sed   'a内容'  a.txt
  echo cccccccccccc > a.txt
  sed  'aFFFFFFFFF' a.txt    在没行的下方添加内容FFFF...
  sed  'iFFFFFFFFF' a.txt   在没行的上方添加内容FFFF...
  echo 11111111 >> a.txt
  sed  '$aFFFFFFFFF' a.txt   在最后一行的下方添加
  sed  '1aFFFFFFFFF' a.txt   在第一行添加
  echo  ccccccccccc >> a.txt
  sed  '/^c/aFFFFFFFFF' a.txt     在以c开头的行添加
  sed  -i '/^c/aFFFFFFFFF' a.txt  在以c开头的行添加,修改原文件
  sed  -i '$ayzs:x:2001:2001:tea:/home/yzs:/bin/bash' /etc/passwd  在最后一行的上边添加内容
  sed '1,3aF' a.txt    在第123行的上边添加
  sed  -e 'aF' -e 'aX' -e 'aW' a.txt  在每行的上边分别都添加FXW,都隔行
  --------------------------------------------------------------------
  c替换行   (以行为替换单位)
  sed   'c内容'   a.txt
  sed   '条件c内容'   a.txt
  sed  'cPLJ' a.txt      把每行替换成PLJ
  sed  '1cPLJ' a.txt    把第一行替换成PLJ
  sed  '2,5cPLJ' a.txt  把第2345行替换成PLJ
  sed  -e '2cPLJ' -e '3cPLJ' a.txt   指定多个处理动作替换
  sed  -i  '/^a/cT' a.txt   把以a开头的行替换成T  -i处理原文件
  --------------------------------------------------------------------
  sed   's/aa/bb/'  a.txt  将每行的第一个aa 替换成bb
  sed 's/aa/bb/3' a.txt 将每行的第3个aa 替换成bb
  sed 's/aa/bb/g' a.txt 将所有的aa 替换成bb
  sed 's/aa//g' a.txt 将所有的aa删除
  sed 's/aa/&s/g' a.txt    将所有的aa 替换成aabb,&代表前边的查找串
  sed  '4,7s/^/#/g'  a.txt 将第4-7行注释掉
  sed   's/^an#/an/'  a.txt  去除以an开头行的注视
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  导入导出操作
  r  读取文件  :
  3r b.txt 在第3行文件下方插入文件b.txt
  sed  '3r b.txt'   a.txt
  4,7r b.txt   在第4-7行每一行的下方插入文件b.txt
  sed   '4,7r b.txt'   a.txt
  w 保存到文件:
  3w c.txt   将第3行另存到文件c.txt
  sed   '3w c.txt'  a.txt
  4,7w c.txt  将第4-7行另存到文件c.txt
  sed    '4,7w c.txt'  a.txt
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  sed  复制剪切
  基本动作
  复制:   H:模式空间--追加--保持空间
  h:模式空间--覆盖--保持空间
  粘贴:  G:保持空间--追加--模式空间
  g:保持空间--覆盖--模式空间
  复制把文件1-2行复制到文件的末尾
  sed  -n  '1h;2H;p'  a.txt
  剪切
  把文件1-2行剪切到文件的末尾
  sed  '1h;2H;1,2d;$G' a.txt
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  后向引用   (-r  表示转义)
  保存替换时的源数据,在替换时使用源数据做替换。最多用9个()
  ()()()()()()()()()
  \1\2..............\9
  sed -r  '1s/(^.)(.*)/\1/' a.txt   把第一行替换成第一行的第一个字母
  sed -r  's/(^.)(.*)/\1/' a.txt      把所有行替换成每一行的第一个字母
  sed -r  's/(^.)(.*)/\2/' a.txt       把每一行第一个字符去掉
  sed -r  '1s/(^.)(.*)(.$)/\3\2\1/' a.txt  把第一行第一个字符和最后一个字符对调
  sed -r  '1s/(^.)(.*)(.$)/\2/' a.txt     把第一行的第一个字符和最后一个字符去掉
  sed -r  '1s/(^.)(.*)(.$)/\1\3/' a.txt     只保留第一行的第一个字符和最后一个字符
  sed -r  '1s/(^.)(.*)(.$)/\1abc\3/' a.txt   把第一行第一个字符和最后一个字符保留并且中间加字母abc
  sed -r  's/(^.)(.*)(.$)/\1abc\3/' a.txt  把第每行的第一个字符和最后一个字符保留并且中间加字母abc
  sed -r  's/(^.)(.*)(.$)/\2\3/' a.txt    把每行的第一个字符去掉
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  &  保存替换时的源数据
  sed -r 's/^./[&]/' a.txt   把每行的第一个字符用[ ]扩起来
  sed '2s/lisi/&user/'  a.txt   把第二行的lisi后面加上字母user
  sed '2s/lisi/[&]/'  a.txt     把第二行的lisi用[ ]扩起来


运维网声明 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.yunweiku.com/thread-555576-1-1.html 上篇帖子: shell使用技巧 下篇帖子: Shell-循环语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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