前段时间学了下awk和sed这两个小工具,顺手写下心得体会吧,awk的已经写完了,接下来就是sed,不多说,开始吧~-~

总得来说,awk侧重于处理域,而sed更侧重于处理行。与awk类似,sed也是逐行进行处理,下面说下sed的主要用法。

一、参数

-n:安静模式,当加上此参数时,sed处理的结果不会输出到屏幕上,除非sed命令中指明要打印的行,如:

sed -n '1,3p' test.txt

会打印出1-3行,但

sed '1,3p' test.txt

除了会打印1-3行之外,还会打印出整个文件。

sed -n 's/haha/HAHA/g' test.txt

上述命令就不会输出任何结果,但

sed -n 's/haha/HAHA/gp' test.txt

会打印出经过处理的行,而

sed 's/haha/HAHA/g' test.txt

会打印出所有行,不管有没有经过处理。

-i:直接在原文件上进行修改,慎重!

-r:使用扩展正则表达式

二、主要用途

1、输出指定行:

sed -n '1,3p' test.txt

输出1-3行

sed -n '/^haha/p' test.txt
输出行首为haha的行
2、删除指定行:
sed '1,3d' test.txt

删除1-3行

3、在指定行后添加内容:

sed '1a hello, world' test.txt

在第一行之后添加hello, world

4、替换指定行:

sed '1,2c hi' test.txt

将1-2行替换为hi

5、替换文本

这是我认为sed最重要的功能!!!

假设test.txt中内容为:

0123##abcd##

1234##abcd##

cat test.txt | sed 's/^[0-9][0-9]*//g' | sed 's/##/ /g'

会将test.txt中行首数字删掉,并将##替换为空格,如果涉及到\d、\w等扩展正则表达式,加上-r参数即可

6、在指定字符串前、后添加字符串

sed 's/$/& hello/g' test.txt
在每行之后添加hello
sed 's/^/hello &/g' test.txt
在每行之前添加hello