正则表达式之sed

  • grep命令还不够强大,它只能用于查找,而不能进行替换。这里就需要用到sed以及awk命令了,他们能把替换的文本输出到屏幕上,而且还有其他丰富的功能。它们都是流式编辑器。是针对文本的行来进行操作的。

(1) 打印出包含指定字符串的行

sed -n '/root/'p test.txt   //打印出包含root的行

正则表达式之sed_第1张图片

(2)同时也是支持.或者*+

sed -nr '/o+t/'p test.txt等于 sed -n '/o\+/'p test.txt 

正则表达式之sed_第2张图片
(3)指定要过滤出 的字符出现的次数。

sed -nr '/o{2}/'p  test.txt

正则表达式之sed_第3张图片

(4)过滤出字符串1或者字符串2

sed -nr '/root|var/'p test.txt

正则表达式之sed_第4张图片 或者使用-e选项,效果是一样的

sed  -e '/root/'p  -e '/var/'p -n test.txt

正则表达式之sed_第5张图片 如果2个要求都满足,那么会打印2次。

(5)打印指定的行

sed -n '3'p  test.txt  //需要打印第几行就写数字几, -n选项的作用就是只打印我们需要的那行,其他的不显示。

正则表达式之sed_第6张图片如果是打印多行可用,隔开 。例:

sed  -n '3,8'p test.txt //打印第3行到第8行
sed  -n  '3,$'p  test.txt //打印第3行到最后一行。   

(6)其他应用

sed -n '/^s/'p test.txt //打印出以s开头的行。
sed -n  '/in$/'p  test.txt //打印出以in结尾的行
sed -n  '/.+root.+/'p   test.txt //打印出root字符串在行中间的行。

正则表达式之sed_第7张图片

(7)匹配时不区分大小写

sed  -n   '/var/'Ip test.txt //匹配var字符串,不区分大小写。且I不能跟在-n后面

正则表达式之sed_第8张图片

(8)删除指定的行

sed  '3'd  test.txt  //删除第3行,但是并不会删除真实文件的内容,这里只是不显示出来而已。

正则表达式之sed_第9张图片

要删除真实文件的内容,可以加上-i选项。

sed -i '1,15'd test.txt

正则表达式之sed_第10张图片

(9)指定性删除

sed -i '/home/'d test.txt  //删除包含home字符串的行。

正则表达式之sed_第11张图片

  • 替换字符串,与vim中的替换方式很类似。
    (1) sed '1,5s/root/toor/g test.txt //将文件中第一到第五行中所有出现的root替换为toor

正则表达式之sed_第12张图片

(2)

sed -r '1,5s/ro+/b/g' test.txt //将1-5行中的ro+替换为b ,加上-r选项就可以不使用转义字符。

正则表达式之sed_第13张图片

(3)也可以写成这样

sed  's@/sbin/nologin@315@g'  test.txt

正则表达式之sed_第14张图片
(4)删除所有的英文字母

 head test.txt  |sed    's/[a-zA-Z]//g'  //将所有的英文字母删除,也就是替换为空。 

正则表达式之sed_第15张图片

  • 调换2个字符的位置
head |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'   //sed命令支持管道符,使用小括号把要替换的字符打包成一个整体。

正则表达式之sed_第16张图片

  • 在某行前添加指定内容。
sed  's/^.*$/123&/' test.txt  //文件中所有行的行首添加123字符。这里的&表示(^.*$/)

正则表达式之sed_第17张图片

正则表达式之sed_第18张图片

你可能感兴趣的:(正则表达式之sed)