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

【一天一个shell命令】文本内容操作系列-sed-简介

[复制链接]

尚未签到

发表于 2018-8-25 09:48:07 | 显示全部楼层 |阅读模式
  说明:
  sed是stream editor(流编辑器)的缩写。它能够完美匹配正则表达式。sedawk是文件编辑最重要的两个命令了。尤其涉及到了很多正则表达式的问题,笔者不敢也有点犯怵,试着写写。
  实例:
  1.替换文件中的字符串
  $sed -i 's/text/replace/g' file
  #如果不加g结尾,则替换每一行的第一个
  #如果只是打印,去掉-i
  2.忽略前N处匹配,从N+1出开始替换
  $sed -i 's/text/replace/2g' file
  #在g前面加入数字N
  3.移除空白符
  $sed '/^$/d' file
  4.标记已匹配的内容
  $echo this is an example | sed 's:\w\+:/[&]:g'
  [this] [is] [an] [example]
  #冒号是定界符,只要合适,定界符可以是任意的
  5.子串匹配
  $echo this is digit 7 in a number | sed 's:digit \(0-9\):\1:'
  #输出:this is 7 in a number
  #学过正则表达式的人,都理解group的概念,()里的内容是第一组,所以只打印了7
  6.引用
  $text=hello
  $echo hello world | sed "s/$text/HELLO"
  #输出HELLO world
  #可能有人注意用双引号,是因为单引号会把$text当做一个字符串,而不是表达式。
  7.删除
  $sed '2d' file #删除第二行
  $sed '2,$d' file  #删除2-最后一行
  $sed '$d' file  #删除最后一行
  解读—help
  用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
  -n, --quiet, --silent
  取消自动打印模式空间
  -e 脚本, --expression=脚本
  添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件
  添加“脚本文件”到程序的运行列表
  --follow-symlinks
  直接修改文件时跟随软链接
  -i[扩展名], --in-place[=扩展名]
  直接修改文件(如果指定扩展名就备份文件)
  -l N, --line-length=N
  指定“l”命令的换行期望长度
  --posix
  关闭所有 GNU 扩展
  -r, --regexp-extended
  在脚本中使用扩展正则表达式
  -s, --separate
  将输入文件视为各个独立的文件而不是一个长的连续输入
  -u, --unbuffered
  从输入文件读取最少的数据,更频繁的刷新输出
  --help     打印帮助并退出
  --version  输出版本信息并退出
  如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
  sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
  输入读取数据。
  解读:
  对于这个帮助信息,确实信息量非常不足,不过sed确实过于复杂,所以尝试分成几次来详解这个命令。
  我再借用另一段帮助信息文档
  调用sed命令有两种形式:

  • sed [options] 'command' file(s)
  • sed [options] -f scriptfile file(s)
  options

  • a\   例如:sed "a\mm" file
  • 在当前行后面加入一行文本。
  • b lable
  • 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
  • c\
  • 用新的文本改变本行的文本。
  • d
  • 从模板块(Pattern space)位置删除行。
  • D
  • 删除模板块的第一行。
  • i\
  • 在当前行上面插入文本。
  • h
  • 拷贝模板块的内容到内存中的缓冲区。
  • H
  • 追加模板块的内容到内存中的缓冲区
  • g
  • 获得内存缓冲区的内容,并替代当前模板块中的文本。
  • G
  • 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
  • l
  • 列表不能打印字符的清单。
  • n
  • 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
  • N
  • 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
  • p
  • 打印模板块的行。
  • P(大写)
  • 打印模板块的第一行。
  • q
  • 退出Sed。
  • r file
  • 从file中读行。
  • t label
  • if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  • T label
  • 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  • w file
  • 写并追加模板块到file末尾。
  • W file
  • 写并追加模板块的第一行到file末尾。
  • !
  • 表示后面的命令对所有没有被选定的行发生作用。
  • s/re/string
  • 用string替换正则表达式re。
  • =
  • 打印当前行号码。
  • #
  • 把注释扩展到下一个换行符以前。
  
  以下的是替换标记

  • g表示行内全面替换。
  • p表示打印行。
  • w表示把行写入一个文件。
  • x表示互换模板块中的文本和缓冲区中的文本。
  • y表示把一个字符翻译为另外的字符(但是不用于正则表达式)
  区别加斜杆与不加
  例如: a\ 表示在a\后面加入内容,而d则在d前面加入表达式,1d表示删除1行。


运维网声明 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-556243-1-1.html 上篇帖子: shell脚本检查Tomcat运行状态 下篇帖子: linux 批量scp自动上传文件的shell脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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