在工作中经常用到sed,这里总结一下sed的用法实例。
[nanhuang@nanhuang ~]$ cat test
host = mydomain01.online.china.com
host = mydomain02.online.china.com
host = mydomain03.online.china.com
host = mydomain04.online.china.com
host = mydomain05.online.china.com
host = mydomain07.online.china.com
host = mydomain08.online.china.com
host = mydomain09.online.china.com
host = mydomain10.online.china.com
1, 删除空行。空行用正则表达式表示为^$。所以,
sed -i -e "/^$/d" filename.txt
2, 利用行号,删除行。
sed '1,5 d' test
sed '5 d' test
3, 在指定行上/下添加行。(知道/不知道行号)。使用'//i\' 或者 '//a\' 。例如:
sed -i -e "/sentence specified/i\sentence appened' filename
sed -i -e "/sentence specified/a\sentence appened' filename
注意:这里的&, \1 \2...无法如在's///'里一样使用。
4, ^和$在替换表达式中的应用。^和$代表行首和行尾特殊字符,所以。如果要在行首或行尾添加字段。直接使用替换就可以了。例如:
sed -e 's/^/new_added_string/g' filename
sed -e 's/$/new_added_string/g' filename
5, 在文件末尾添加行。
就目前我掌握的技术来看,必须要借助tail命令找出最末一行,然后通过grep定位行号。然后使用 'a\'来完成替换。使用博客开头的文件。
sed -e "$(tail -1 test | xargs -I {} grep -n {} test | cut -d: -f1) a\sdfadf" test
注意:当然这种做法非常的繁琐。
末尾添加使用echo 'string' >> filename。
行首添加使用 sed '1 i\string' filename。
6, 调换两行的位置。
7, 一行如果有多个匹配的字段,指定第几个字段被替换。g表示一行中所有的字段,数字表示第几个字段。例如:
echo abcdabcdabc | sed 's/abc/bbb/3'
资料:http://www.grymoire.com/Unix/Sed.html