本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

Linux文本处理三剑客——sed命令使用教程

发布:TangLu2018-7-18 22:42分类: Linux命令 标签: Linux Sed

SED是一种流编辑器工具,可以根据设置的匹配条件对文件内容进行处理,支持正则表达式。sed每次处理一行数据,和awk处理流程是一样的。

sed命令格式:

sed [options] 'command' file
sed [options] -f scriptfile file


sed命令常用参数:

-r支持扩展正则表达式,如+、|、()等特殊符号

cat file | sed -nr '/=+/p' #打印出包含一个或多个=号的行


-i不加-i时所作的操作都是不会修改源文件的,如果要修改源文件的话就需要加上这个参数

sed6.jpg

这里有个备份文件的小技巧:为避免误操作直接覆盖了源文件,我们可以在加-i的时候加上.bak,然后就会自动生成一个以.bak结尾的备份文件,如图:

sed7.jpg

-n:不显示默认输出。由于sed默认会把所有行都输出,不管是修改的还是不修改的。加上-n选项,就可以关闭输出信息,在匹配条件最后加p标签就可以只显示出我们修改过的内容,比如单独显示某一行数据cat file | sed -n '4p'

sed5.jpg 

 -e:多重匹配,第二次匹配时模式空间里的数据是第一次替换后的

sed -e 's/tom/TOM/' -e 's/tom/jerry/' /etc/passwd
##由于第一次匹配时把tom换成了TOM,第二次就不存在tom字段,所以不会再替换为jerry
sed  's/tom/TOM/;s/tom/jerry/' /etc/passwd    #分号也可以代替-e选项


sed的定址与命令:

定址决定了sed需要处理的范围,而命令决定了需要执行的动作,所以写sed语句的话可以按照“将x行到y行中带有z字符的内容做a操作”,比如从1-10行中删除root开头的行。通常把定址与命令用单引号引起来,如果需要正则匹配的话,要使用//来将正则内容囊括进去

1、sed定址写法示例:

sed -n '/14:00/,/14:30/p' /var/log/messages  #过滤指定日期的日志

2、删除命令——d

2d代表删除第二行内容

 sed1.jpg


2,5d,删除第二到第五行。2;5d删除第2和第5行

 sed2.jpg


3、s——替换命令

用///或###(任意成对的符号都可以这样的框架来引用需要替换的和替换后的内容,如s/old/new/或s#old#new#这两种写法都可以把old一词替换为new,默认只替换每行第一个,如果想要每行替换,可以写为s/old/new/g,g代表全局old部分可以用正则表达式匹配,new不可以。如:

    sed  '1,2s/tom/TOM/g'  /etc/passwd,把第一第二行的tom替换为TOM
    sed  '/root/s/root/ROOT/'  /etc/passwd,匹配包含root的行,并把root替换ROOT    


4、q——退出命令

由于sed工作模式是将文件的每一行都处理后再进行输出,那么当遇到处理巨大文件时就会耗费很多时间,这可能是不必要的,比如我们明确只需要处理该文件的前100行。这个时候就可以用上该选项了,示例:

cat bigfile | sed '1,100d;100q'  #处理到第100行后就退出

5、a——在指定行后面追加一行内容

sed+.png

6、i——在指定行前面追加一行


cat shell.sh | sed -i '1i#!/bin/bash'  #给脚本增加一行注释


7、sed的后项引用:

括号内的部分可以在后面直接被引用,第一个括号内的内容是\1,依次类推,也可以使用&符号代表前面所匹配到的所有内容。后项引用可用于更换文本内容的位置或者批量添加注释

cat /etc/fstab | sed -nr 's/(.*)(mysql)(.*)/\3\2\1/gp'
sed -r '3,5s/.*/#&/' /etc/fstab
sed -ir '1,10s/^/#/' /etc/fstab    #批量增加注释的最简洁办法
sed -r 's/(.)(.)(.*)/\1\2#\3/' /etc/fstab    #在每行第二个字母前加注释
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Linux文本处理三剑客——sed命令使用教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-146.html  [生成短网址]

已有 0/3536 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~