一、sed介绍:
sed是非交互式的编辑器,同时又是面向字符流的,一次处理一行文本。当前输入的行被缓存至一个被称为模式空间(pattern space)的内存空间中,与给定的模式进行比对,若不匹配,则将内容输出至屏幕,之后读取第二行;若匹配,则执行编辑命令,命令执行完成后,将模式空间中的内容输出至屏幕(默认行为)。之后再去读取第二行,再比对,再处理…一直重复到读取全部的文件内容。
sed同grep、awk一样,匹配模式支持使用正则表达式。默认支持基本正则表达式,通过指定选项可支持扩展正则表达式。
sed只有在使用特定选项的情况下才会对原文件做修改,当然,这个行为具有破坏性,应该慎用。sed的输出也可以采用重定向的方式保存至文本中。
二、sed用法:
sed [option]… 'script' inputfile…
script:地址定界编辑命令
1、常用options:
-n :不输出模式空间中的内容至屏幕。默认情况下,模式空间中的内容会被输出至屏幕。
-e script: 实现多点编辑。
例:sed -e script1 -e script2 somefile
-r :支持扩展正则表达式。sed默认支持基本正则表达式。
-f /path/to/sed_script_file:从指定文件中读取编辑脚本来处理文件。
-i :直接编辑原文件,危险操作,慎用。
例:将/etc/fstab拷贝至/tmp,命名为fs1。对比下-n参数的意义。(p命令为显示模式空间匹配到的内容。)
没加-n参数,因为默认情况下,模式空间中的内容会被输出至屏幕。我们又通过p命令让第三行输出了一次,所以第三行被输出了两次。
看下,加上-n的效果。
2、地址定界
(1)空地址:对全文进行处理
(2)单地址:
#:指定行
/pattern/:被此模式匹配到的每一行。
(3)地址范围:
m,n:从第m行到第n行
3,9
m,+n:从第#行开始,往后+n行,包含第m行
3,+8
m,/pattern/:从指定的第m行开始,到第一次被pattern匹配的行
/pattern1/,/pattern2/:从第一次被模式1匹配到的行开始,到第一次被模式2匹配到的行结束。
(4)步进:~
1~2:所有奇数行。
2~2:所有偶数行
例2.1:显示fs1文件的6到10行
例2.2:显示以#开头的行到以/dev开头的行。
它是这样显示的:从第一次匹配到#开头的行开始,到第一次匹配到以/dev开头的行结束。后面虽然还有以/dev开头的行,但是匹配也不会进行了。
例2.3:编辑num.txt文件,每行对应1-10中的一个数字,显示其奇数行和偶数行
3、编辑命令
d:删除匹配到的行
sed '1,5d' /etc/fstab
sed '/^UUID/d'
p:显示模式空间中匹配的内容
a \text:(append)在模式匹配到的行后面追加文本,支持使用\n实现多行追加
i \text:(insert)在模式匹配到的行前面插入文本,支持使用\n实现多行插入
sed '3a \new line\nanother new line' /etc/fstab
c \text:把匹配到的行替换为指定的文本
w /path/to/somefile:保存模式匹配到的行至指定的文件中
r /path/to/somefile : 读取指定为念的内容至被模式匹配到的行处;用于实现文件合并。
= :为被模式匹配到的每一行加上行号,行号会被当作一个新行
! :取反
位于模式之后,命令之前。地址定界!编辑命令
例:sed -n '/^#/!p' /etc/fstab
例3.1:删除所有以#开头的行
例3.2:在以/dev开头的行后加上内容为“alpha”的行
例3.3:在不以/dev开头的行后面加上内容为“alpha”的行。和上一题对比下结果。
例3.4:读取/etc/issue的内容,并将其追加至以UUID开头的行后
例3.5:将以/dev开头的行的内容替换为“this line has been replaced”
4、查找替换
s///:查找替换,分隔符可自定义,如:s@@@ 或s###。
替换标记:
g:全局替换。s///g
p:显示替换成功的行
w /path/to/somefile:将替换成功的行保存至指定的文件中。
sed 's@root@&hello@' /etc/passwd:在root单词后加上hello
sed 's@root@hello&@' /etc/passwd:在root单词前加上hello
sed –i.bak ‘s/dog/cat/g’ pets :在对pets文件做修改之前,先做备份,本分文件以".bak"结尾
例4.1:在fs1文件中不是以#开头的行的行首增加#号。
例4.3:利用sed取出给定路径的基名和目录名
(1)取基名。需要使用正则表达式中的后向引用
(2)取目录名
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/32267