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

shell 正则表达三剑客--sed

[复制链接]
发表于 2018-8-27 07:59:47 | 显示全部楼层 |阅读模式
  sed 命令
  sed是一种在线编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
  参数:
  -n :只有经过sed 特殊处理的那一行(或者动作)才会被列出来
  -e :直接在命令列模式上进行 sed 的动作编辑;
  -f :直接将 sed 的动作写在一个文件内
  -r :sed 的动作支持的是延伸型正规表示法的语法
  -i :直接修改读取的文件内容,而不是输出到终端
  a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
  c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  d :删除,因为是删除啊,所以 d 后面通常不接任何内容
  i :插入, i 的后面可以接字串,而这些字串会是新的一行
  p :列印,将某个选择的数据输出
  s :取代,直接进行取代,通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
  常用示例:
  删除:d命令
  $ sed '2d' filename-----删除filename文件的第二行。
  $ sed '2,$d' filename-----删除filename文件的第二行到末尾所有行。
  $  sed '$d' filename-----删除filename文件的最后一行。
  $ sed '/test/'d filename-----删除filename文件所有包含test的行。
  替换:s命令
  $ sed 's/test/mytest/g' filename-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
  $ sed -n 's/^test/mytest/p' filename-----(-n)选项和p标志一起使用表示只输出那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就输出它。
  $ sed 's/^192.168.0.1/&localhost/' filename-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
  $ sed -n 's/\(love\)able/\1rs/p' filename-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被输出出来。
  $ sed 's#10#100#g' filename-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
  选定行的范围:逗号
  $ sed -n '/test/,/check/p' filename-----所有在模板test和check所确定的范围内的行都输出
  $ sed -n '5,/^test/p' filename-----从第五行开始到第一个包含以test开始行之间的所有行
  $ sed '/test/,/check/s/$/sed test/' filename-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
  多点编辑:e命令
  $ sed -e '1,5d' -e 's/test/check/' filename-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
  $ sed --expression='s/test/check/' --expression='/love/d' filename-----一个比-e更好的命令是--expression。它能给sed表达式赋值。
  从文件读入:r命令
  $ sed '/test/r file' filename-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
  写入文件:w命令
  $ sed -n '/test/w file' filename-----在filename中所有包含test的行都被写入file里。
  追加命令:a命令
  $ sed '/^test/a\\--->this is a filename' filename  1016-12-17 09:25:55,658 [catalina-exec-74] WARN org.hibernate.util.JDBCExceptionReporter  - SQL Error: 0, SQLState: null

  1016-12-17 09:25:55,606 [catalina-exec-74] INFO org.springframework.jdbc.datasource.JdbcTransactionObjectSupport  - JDBC 3.0 Savepoint>  根据日志格式,需要将12-17的09:25:55 和09:28:08 之间的日志截取出来。
  使用sed命令如下:
  sed -n ‘/2016-12-17 09:25:55/,/2016-12-17 09:28:08/p’ logfile
  这样可以精确地截取出来某个时间段的日志。
  也可以用下面命令
  sed -n ‘/2016-12-17 09:[0-9][0-9]:[0-9][0-9]/,/2016-12-17 16:[0-9][0-9]:[0-9][0-9]/p’  logfile


运维网声明 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-557013-1-1.html 上篇帖子: mysql导入表shell脚本 下篇帖子: shell 正则表达三剑客--awk
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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