sed用法总结

说明:sed是以行作为处理单位的文本处理工具,sed一般不会直接修改源文件,如果要修改源文件要用参数指出,需要新文件要导出。

使用格式:

sed [-nefri] [command] filename
option:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

command:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
用法示例:
显示第一行

sed -n '1p' filename

显示最后一行($表示最后一行)

sed -n '$p' filename

显示第一行和第三行

sed -n '1p;3p' filename

或者

sed -n -e '1p' -e '3p' filename
那如果要依次显示第三行和第一行呢?
默认是按顺序显示的所以
sed -n '3p;1p' filename
是不行的。那咋办呢,我还不知道。
显示1-3行
sed -n '1,3p' filename
搜索包含'ipaddr'包含的行
sed -n '/ipaddr/p' filename
在1-4行中搜索包行'ipaddr'字段的行
 sed -n '1,4p' filename | sed -n '/ipaddr/p'
把搜索结果导出到新文件newfile
 sed -n '1,4p' filename | sed -n '/ipaddr/p' >newfile
在第一行上、下插入一行文本'hello'
sed '1i hello' filename
sed '1a hello' filename
在1-3行后均插入一行文本'hello'
sed '1,3a hello' filename
第一行插入一行'hello'文本,第二行插一行'world'文本
sed -e '1a hello' -e '2a world' filename
-e表示进行多项编辑,即对输入行应用多条sed命令是使用,直接在指令模式上进行sed的动作编辑。
将1-3行替换为一行文本'hello'
sed '1,3c hello' filename
将第一行替换为'hello'将第二行替换为'world'
sed -e'1c hello' -e '2c world' filename
以行为处理单位,将文本中所有的'option'替换成'hello'
sed 's/option/hello/' filename
将1-5行的'option'替换成’hello',6-7行的'option'替换成'world',这个我还不确定对不对
 sed -e '1,5s/option/hello/' -e '6,7s/option/world/' filename
行首的值为'^',行尾的值为'$',可以通过替换的方法在行首行尾添加一些文本
在1-5行行首添加'config',并把1-5行所有'option'替换成'hello'
sed -e'1,5s/^/config /' -e '1,5s/option/hello/g' filename

特别注意,在上述替换命令中,只能替换每行的第一个匹配字符,例如

root@OpenWrt:~# cat newfile
abcabc
ab cd

执行

root@OpenWrt:~# sed 's/a/LOVE/' newfile
LOVEbcabc
LOVEb cd
若想替换所有匹配字符则需要在引号内容最后添加'g'
root@OpenWrt:~# sed 's/a/LOVE/g' newfile
LOVEbcLOVEbc
LOVEb cd
如何删除文件中的特定字符串?当然不删除行了。
root@OpenWrt:~# cat newfile
abcabc
ab cd
root@OpenWrt:~# sed 's/ab//' newfile
cabc
 cd
root@OpenWrt:~# sed 's/ab//g' newfile
cc
 cd

你可能感兴趣的:(笔记)