Sed工具常用用法总结
Sed是一种好用的流编辑工具,在文本里进行替换、删除、编辑操作十分方便。学完了Sed的一些常用操作,下面总结一下,方便日后翻阅。
sed [选项] {指令} 文件
选项:
-n 加入这个可以使sed命令执行后屏蔽改后内容的输出
-i 将执行完的指令写入文件,不然执行完文件内容不做改变
-e 同时执行多个指令,指令间用;分隔
-p 打印,和-n配合可以输出指定行
动作:
-a 在指定位置后面追加一行
-i 在指定位置前面追加一行
-c 替换指定位置的行
-d 删除指定行
-s 替换字符
-y 按字符替换
下面举几个例子
在test.sh文件第三行后追加行 abcde:
sed ‘3a abcde’ test.sh
在test.sh文件第三行前追加行 abcde:
sed '3i abcde' test.sh
在test.sh文件中把所有的a字符换成b字符
sed 's/a/b/g' test.sh
此时g表示全局替换,如果是用具体的数字,比如2,则替换第二个在test.sh文件中把1到5行删除,注意这里,是表示一个区间:
sed '1,5/d' test.sh
上面讲到的行号都是给出来的,然而有时候当文本行数太多,并不能确定行号,此时我们可以用正则表达式来定位到目标行。如找到tesh.sh文件里包含abc的行,并在前面添加一行def
sed '/abc/i def' test.sh
此时有个特例,如果正则表达式//之间没有任何字符,则表示匹配最近一次正则表达式的内容,如找到包含abc这行,把行里第二个abc换成cba,如
sed '/abc/s//cba/2'
找到以abc结尾的行,并在其后面添加一行def
sed '/abc$/a def' test.sh
从第一行开始,把奇数行全部删除
sed '1~2/d' test.sh
,这里1~2的意思是说,从第一行开始,每两行进行一次操作替换命令:把test.sh文件里a1、a2等an变成(an)
sed '/a[0-9]/s//\(&\)/g'
注意这里()都是转义字符,要用\(和\)表示这么一条一条写固然方便,但是如果是比较长的脚本,则可以把批量指令写成脚本,再统一对该文件执行脚本。比如把指令写在a.sh文件,对abc.txt文件执行操作。可以用
sed -f a.sh abc.txt
对文件执行操作 。此时脚本文件a.sh里不需要写sed。如[root@localhost ~]#cat a.sh /.*/{ /^$/d #删除全部空白行 s/a/b/g #把a全部换成b }
10.依次替换命令:把test.sh文件里abc分别换成ABC
sed 'y/abc/ABC/' test.sh
这里列举的只是很基础的一部分,日后有再深入学习再做补充,有任何错误烦请指出。