我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。
强大的处理文本的工具sed
我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。
一.sed,英文全称Stream EDitor,翻译过来就是行编辑器
1.用法
1 | sed[option]…’script’ inputfile… |
其中‘script’可表示为’地址定界+编辑命令’
2.option
-n 取消默认打印内容到屏幕(示例1)
-e 多点编辑,表达且关系,与grep的-e不同,grep -e表达或关系(示例2)
-f 从指定文件中读取编辑脚本(示例3)
-r 支持使用扩展正则表达式
-i.bak 原处编辑,并备份文件file.bak(示例4)
3.地址定界:
- (1)不给地址:对全文进行处理
(2)单地址:#:指定的行,$:最后一行
/pattern/:支持正则表达式,被此模式所能匹配到的每一行(3)地址范围:
#,# (示例5)
#,+#
/pat1/,/pat2/ (示例6)
/pat1/, # (示例7)(4)~:步进
1~2 奇数行 (示例5)
2~2 偶数行
4.编辑命令:
d 删除模式空间匹配的行(示例4)
p 打印当前模式空间内容,追加到默认输出之后(示例1)
a[]text 在指定行后面追加文本(示例4)
如要实现插入内容空格开头可先追加\再输入空格
支持使用\n实现多行追加(示例8)i[]text 在指定行前面插入文本(示例9)
c[]text 替换指定行尾单行或多行文本(示例10)
w /path/somefile 保存模式匹配的行到指定文件(示例11)
r /path/somefile 读取指定文件的文本匹配的行后(示例12)
注意:w,r后跟文件一定要加空格
可利用此命令定义别名到.bashrc
= 为模式空间中的行打印行号
! 取反,!需加载地址定界和编辑命令中间,如’2!d’(示例13)
s///:查找替换,支持使用其他分隔符;s###;s@@@(示例14)
二.示例
以下我们创建文件test进行示例:
示例1:sed ‘1,10p’ /data/test.sed
sed命令默认将文本内容打印到屏幕,由于执行命令p,文本内容被打印了两遍
1 | sed -n ‘1,10p’ /data/test.sed |
sed -n选项将取消默认输出到屏幕,仅显示p的执行结果
示例2:sed -n -e ‘1p’ -e ‘3p’
显示第一行和第三行,-e表示且的关系
示例3:sed -n -f sedscripts.txt /data/test.sed
将2,5p写入sedscripts.txt文件,-f选项读取sedscripts.txt,并执行文件中内容
示例4:sed -i ‘1,10a#’ /data/test.sed
表示在第1至第10行内容后插入#,-i选项直接编辑了test.sed的文本内容
1 | sed -i ‘/#/d’ /data/test.sed |
表示将所有带#的行删掉并编辑文本
示例5:sed -n ‘3p’
打印第3行内容
sed -n ‘2,5p’
打印第2至第五行
sed -n ‘2,+3p’
打印第2至第5行
sed -n ‘1~2p’
打印奇数行
sed -n ‘2~2p’
打印偶数行
示例6:正则定界,表示ifconfig命令输出中开头eth2的行,至开头为lo的行
示例7:正则数字混合定界,表示ifconfig命令输出中,eth2开头的行到第12行的内容
示例8:多行插入,将aaa\nbbb插入到每行后面
示例9:sed ‘1,10i#’ /data/test.sed
在每一行上面插入#
示例10:sed ‘1,5c’ /data/test.sed
将test.sed文件中1到5行替换为一个#
示例11:sed ‘2,5w f1’ /data/test.sed
将test.sed文件中第2到第5行内容打印到f1文件中
示例12:sed ‘2,5r f1’ /data/test.sed
将f1的内容插入到第2至第5行
示例13:sed -n ‘2,5! p’ /data/test.sed
打印除了第2至第5行的内容
示例14:ifconfig |sed -n “2p”|sed -r “s@.*addr:(.*) Bcast.*@\1@”
利用搜索替代,我们可以将任意段字符串定义成方法,然后表示出整行,再利用后向引用即可取出该字符串。