前段时间学了下awk和sed这两个小工具,顺手写下心得体会吧,awk的已经写完了,接下来就是sed,很少说,开始吧~-~正则表达式
总得来讲,awk侧重于处理域,而sed更侧重于处理行。与awk相似,sed也是逐行进行处理,下面说下sed的主要用法。bash
1、参数ide
-n:安静模式,当加上此参数时,sed处理的结果不会输出到屏幕上,除非sed命令中指明要打印的行,如:工具
sed -n '1,3p' test.txt
会打印出1-3行,但3d
sed '1,3p' test.txt
除了会打印1-3行以外,还会打印出整个文件。字符串
sed -n 's/haha/HAHA/g' test.txt
上述命令就不会输出任何结果,但it
sed -n 's/haha/HAHA/gp' test.txt
会打印出通过处理的行,而class
sed 's/haha/HAHA/g' test.txt
会打印出全部行,无论有没有通过处理。test
-i:直接在原文件上进行修改,慎重!awk
-r:使用扩展正则表达式
2、主要用途
一、输出指定行:
sed -n '1,3p' test.txt
输出1-3行
sed -n '/^haha/p' test.txt输出行首为haha的行
sed '1,3d' test.txt
删除1-3行
三、在指定行后添加内容:
sed '1a hello, world' test.txt
在第一行以后添加hello, world
四、替换指定行:
sed '1,2c hi' test.txt
将1-2行替换为hi
五、替换文本
这是我认为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参数便可
六、在指定字符串前、后添加字符串
sed 's/$/& hello/g' test.txt在每行以后添加hello
sed 's/^/hello &/g' test.txt在每行以前添加hello