本文共 1203 字,大约阅读时间需要 4 分钟。
sed option 'pattern{command1;command2...}'
$cat test.txt
This is 1 This is 2 This is 3 This is 4 This is 5 1.p和P p打印当前模式空间内容,追加到默认输出之后sed -n 'N;p' test.txt 结果 This is 1 This is 3
P打印从开始到第一个\n的内容,sed并不对每行末尾\n进行处理,但是对N命令追加的行间\n进行处理,因为此时sed将两行看做一行。
sed -n 'N;P' test.txt #N前加$!表示末尾行不执行N,可以打印出This is 5在末尾 结果 This is 1 This is 2 This is 3 This is 4
2.n和N
n 提前读取下一行,覆盖模式空间前一行(并没有删除,因此依然打印至标准输出),如果命令未执行成功,则放弃后面的命令,读取下一行再执行sed 使用n命令后sed -n 'n;p' test.txt 结果 This is 2 This is 4 #读取This is 1 执行n命令,此时模式空间值为This is 2.之后读取This is 3 执行n命令后,模式空间值为This is 4.读取This is 5 执行n命令后面没有内容了,所以放弃后面的p命令而退出
N 追加下一行到当前行,把两行看作一行,但是\n换行符还在。如果命令未执行成功,则放弃后面的命令,读取下一行再执行sed
使用N命令后
3.d和D
d 删除当前模式空间内容(不在传到标准输出)并放弃之后的命令,读取新内容重新执行sed D 删除当前模式空间开端至\n换行符内容(不在传到标准输出)并放弃之后的命令,但是剩余模式空间内容重新执行sed4.y
y命令用于字符转换与s命令区别在于,y命令中只要查找条件字符中只要有一个字符符合条件便使用替换字符串中相应的字符进行替换echo " This is a test" | sed 'y/his/HIS/' 而s命令将查找条件字符串作为一个整体 结果 THIS IS a teSt echo "This is a test" | sed 's/his/HIS/' 结果 THIS is a test
5.h、H,g、G
h命令是将当前模式空间中内容覆盖至保持空间,H命令是将当前模式空间中的内容追加至保持空间 g命令是将当前保持空间中内容覆盖至模式空间,G命令是将当前保持空间中的内容追加至模式空间参考:
本文转自wanglm51051CTO博客,原文链接:http://blog.51cto.com/studyit2016/2056826 ,如需转载请自行联系原作者