sed的用法小结
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed [OPTION]… ‘script’ [input-file] …
OPTION:
-n 不输出模式空间中的内容至屏幕,仅显示script处理后的结果 -e 多点编辑,eg: ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab -f 每行编辑一个命令 -r 支持使用扩展正则表表达式
地址定界:
(1)空地址:对全文进行处理 (2)单地址: #指定行 /pattern/:被刺模式所匹配的到的每一行 (3) 地址范围 #,#: #,+#: #,/part1/ /part1/,/part2/ $:最后一行 (4) 步进:~ 1~2:所有奇数行 2~2:所有偶数行
编辑命令:
d:删除d后面通常不接任何东西 p:显示模式空间的内容,通常 p 会与参数 sed -n 一起运行~ w: /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中 r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并 s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等; g:全局替换; w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中; p:显示替换成功的行; a\test 追加,而这些字串会在新的一行出现(目前的下一行) c\text取代,c后面可以接上字符串 i\text追加,而这些字串会在新的一行出现(目前的上一行)
练习:
删除/etc/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符; ~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg 删除/etc/fstab文件中以#开头的行的行首的#及#后面的所有空白字符 ~]# sed 's@^#[[:space:]]*@@' /etc/fstab 输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@' 将etc/fstab中的UUID替换成ABCD ~]# sed 's/UUID/ABCD/p' /etc/fstab
注 sed -i 可以直接修改原文件
[root@localhost ~]# vim test.txt [root@localhost ~]# cat test.txt test [root@localhost ~]# sed -i 'a\#This is a test' test.txt [root@localhost ~]# cat test.txt test #This is a test 在要编辑一个超大的文本文件的时候,就可以不用vim打开再编辑了,直接用sed -i 就可以直接在指定行添加内容了!
原创文章,作者:N27_flypig,如若转载,请注明出处:http://www.178linux.com/85283