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

[经验分享] linux sed

[复制链接]

尚未签到

发表于 2019-2-17 12:14:09 | 显示全部楼层 |阅读模式
  流编辑器 sed
  sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),
  接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
  文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
  命令格式
  sed [options] 'command' file(s)
  sed [options] -f scriptfile file(s)
  =======正则表达式========
  与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的
  元字符。
  在sed使用扩展元字符:
  -r  选项
  在扩展元字符前加\
  元字符功能示例匹配对象
  ^行首定位符/^love/匹配所有以love开头的行
  $行尾定位符/love$/匹配所有以love结尾的行
  .匹配单个字符/l..e/匹配包含一个l,后跟两个任意字符,再跟一个e的行
  *匹配0或多个前导字符/ *love/匹配包含跟在零个或多个空格后love的行
  []匹配一组字符中任意一个/[Ll]ove/匹配包含love或love的行
  [^]匹配不在指定组内的字符/[^A-Z]ove/匹配不在范围A至Z之间的任意一个字符
  \(..\)标签匹配字符s/\(love\)able/\1er/最多可以使用9个标签,模式中最左边的标签是第一个
  \/匹配表含以love结尾的词的行
  &保存查找串以便在替换串中引用s/love/aa&bb/符号&代表查找串
  x\{m\}连续m个x/o\{5\}/匹配出现连接5个字母o的行
  x\{m,\}至少m个x/o\{5,\}/匹配出现5个以上连续字母o的行
  x\{m,n\}至少m个、但不超过n个x/o\{5,10\}/匹配出现5~10个连接的o的行
  扩展元字符
  +匹配一个或多个前导字符'[a-z]+ove'匹配一个或多个小写字母后跟ove的字符串
  ?匹配零个或一个前导字符'lo?ve'匹配l后跟一个或零个字母o以及ve的字符串
  a|b匹配a或b'love|hate'匹配love和hate这两个表达式之一
  ()组字符love(able|rs)匹配loveable或lovers
  (ov)+匹配一个或多个连续的ov
  (..)(..)\1\2标签匹配字符(love)ing
  x{m}字符x重复m次o{5}匹配o出现5次
  x{m,}字符x重复至少m次o{5,}
  x{m,n}字符x重复m到n次o{5,10}
  示例:
  sed '' /etc/passwd
  sed 'p' /etc/passwd
  sed -n 'p' /etc/passwd//取消默认输出
  sed -n '/root/p' /etc/passwd
  sed -n 's/root/alice/' /etc/passwd
  sed -n 's/root/alice/g' /etc/passwd
  sed -n 's/root/alice/gp' /etc/passwd
  sed -n 's/root/alice/gip' /etc/passwd//标志g表示全局,标志i表示忽略大小写
  sed -n '/root/p' /etc/passwd
  sed -n '\crootcp' /etc/passwd//字母c替换/字符
  # cat a.txt
  /etc/abc/456
  etc
  [root@station40 ~]# sed -n '//etc/abc/456/p' a.txt
  sed:-e 表达式 #1,字符 0:no previous regular expression
  [root@station40 ~]#
  [root@station40 ~]# sed -n '/\/etc\/abc\/456/p' a.txt
  /etc/abc/456
  [root@station40 ~]# sed -n '\#/etc/abc/456#p' a.txt
  /etc/abc/456
  注:sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0
  =======地址========
  地址用于决定对哪些行进行编辑。地址形式可以是数字、正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行。
  sed命令告诉sed对指定行进行何种操作,包括打印、删除、修改等。
  sed -n 'p' /etc/passwd//未指定地址
  sed '1,3d' /etc/passwd
  sed -n '/[Jj]ohn/p' datafile
  =======命令与选项========
  sed命令:
  sed命令告诉sed对指定行进行何种操作,包括打印、删除、修改等。
  命令功能
  a\在当前行后添加一行或多行
  c\用新文本修改(替换)当前行中的文本
  d删除行
  i\在当前行之前插入文本
  h把模式空间里的内容复制到暂存缓冲区(覆盖)
  H把模式空间里的内容追加到暂存缓冲区
  g取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容
  G取出暂存缓冲区的内容,将其复制到模式空间,追加在原有内容后面
  l列出非打印字符
  p打印行
  n读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
  q结束或退出sed
  r从文件中读
  !对所选行以外的所有行应用命令取输入行
  s用一个字符串替换另一个
  w将行写入文件
  x交换暂存缓冲区与模式空间的内容
  y将字符转换为另一字符(不能对正则表达式)
  替换标志 s
  g在行内进行全局替换
  i忽略大小写
  sed选项:
  选项功能
  -e允许多项编辑
  -f指定sed脚本文件名
  -n取消默认的输出
  -iinplace,就地编辑
  -r支持扩展元字符
  =======sed示例========
  打印命令:p
  sed '/north/p' datafile//默认情况下,sed打印当前模式缓冲区中的输入行。命令p指示sed将再次打印该行。
  sed -n '/north/p' datafile//取消sed的默认打印动作
  删除命令:d
  sed '3d' datafile
  sed '3,$d' datafile
  sed '$d' datafile
  sed '/north/d' datafile//所有包含模式north的行都被删除;其余的行被打印
  # sed -n '0,/sout/p' datafile
  # sed '/sout/d' datafile
  # sed '0,/sout/{/sout/d}' datafile
  替换命令:s
  sed 's/west/north/g' datafile//g标志对行进行全局替换
  sed -n 's/^west/north/gp' datafile//只打印发生替换的行
  sed 's/[0-9][0-9]$/&.5/' datafile//&代表在查找串中匹配到的内容
  sed -n 's/Hemenway/Jones/gp' datafile//只发生替换的行才被打印
  sed -n 's/\(Mar\)got/\1ianne/p'datafile//Mar作为标签1保存于寄存器中,此处将Margot替换为Marianne
  sed 's#3#88#g' datafile//紧跟在s命令后的字符就是查找串和替换串之间的分隔符,例如查找路径名或日期
  指定行的范围:逗号
  sed -n '1,5p' datafile
  sed -n '/west/,/east/p' datafile//打印在模式west和east之间的所有行,匹配出现的多次
  sed -n '5,/^northeast/p' datafile//打印从第5行到第一个northeast开头的行之间的所有行
  sed '/west/,/east/s/$/**VACA**/' datafile//修改从模式east和west之间的所有行,将各行的行尾($)替换为字符串**VACA**
  多重编辑命令:e
  -e命令是编辑命令,用于sed执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓冲区中的行上
  sed -e '1,3d' -e 's/Hemenway/Jones/' datafile//因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以
  sed '1,3d;s/Hemenway/Jones/' datafile//编辑命令的顺序会影响结果
  
  读文件命令:r
  r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上
  sed '/Suan/r newfile' datafile//如果在文件datafile的某一行匹配到模式Suan,就在该行后读入newfile的内容
  sed '/2/r /etc/hosts' a.txt
  //如果出现Sunan的不止一行,则在出现Sunan的各行后都读入newfile文件的内容
  写文件命令:w
  w命令是写命令,sed使用该命令将当前文件中的一些行写到另一个文件中
  sed -n '/north/w newfile' datafile//文件datafile中所有包含模式north的行都被写到文件newfile中
  sed -n '3,$w /new1.txt' datafile
  追加命令:a
  a命令是追加命令,追加将添加新文件到文件中当前行(即读入模式缓冲区中的行)的后面。不管是在命令行中,还是在sed脚本中,a
  命令总是在反斜杠的后面。所追加的文本位于sed命令的下方另起一行。如果要追加的内容超过行,则每一行都必须以反斜杠结束,最后一行除外,
  最后一行将以绰号和文件名结束sen
  sed '/^north/a--->THE NORTH SALES DISTRICT HAS MOVEDTHE NORTH SALES DISTRICT HAS MOVEDTHE NORTH SALES DISTRICT HAS MOVED

运维网声明 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-673560-1-1.html 上篇帖子: linux NTP 配置 下篇帖子: linux awk
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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