关闭

sed的用法

789人阅读 评论(0) 收藏 举报

今天遇到sed的相关用法,再次对sed的用法进行总结;


1. 替换命令

    sed 's/{old_value/{new_value}/}'

    实现使用new_value替换old_value的操作;例如

    echo it is not your fault | sed 's/fault/problem/'

    it is not your prolbem


    多个修改替换,可以采用-e的方式,也可以使用;多次隔开。例如

    第一种方式:echo it is not your fault | sed -e 's/your/my/' -e 's/fault/problem/'

    第二种方式:echo it is not your fault | sed 's/your/my/ ; s/fault/problem/'

    两条语句的效果是一样的,输出都是:

    it is not my problem

    第三种方式:sed后加一个撇号,然后回车,可以采用多行输入的方式.

  

    全局修改

    sed命令类似于替换命令,每次都处理每行中第一个出现的选定序列,要实现全局的修改,需要使用下面的格式

    sed 's/{old_value}/{new_value}/g'


   匹配替换

   sed命令可以实现特定匹配字段的字符替换,例如

   sed '/your/ s/fault/problem'将your后面的fault改成为problem。

   需要注意的一点:sed执行替换命令是每行单独执行的,它处理过程以行为单位,如果在某一行找到匹配内容,那么将从改行的第一处进行替换修改,加入/g也是在改行的所有的位置进行修改。。如果在改行中没有找到前面的匹配字段,则不进行修改。例如file

    it is not your fault, but my fault

    it is not my fault, but his fault

    fault is not the reason

    在上面的文档中,如果采用 sed '/your/ s/fault/problem/' file 那么只有在第一行找到相关的your匹配字段,那么修改第一个fault为problem,似乎执行正确。

    但是,如果采用 sed '/my/fault/ s/fault/problem/' file 那么在前两行都可以匹配到my,那么就会替换前两行中第一次出现fault的地方为problem,输出为:

    it is not your problem, but my fault

    it is not my problem, but his fault

    fault is not the reason

    同样的,如果加/g,那么也只是在当前行的所有值替换,因此需要谨慎使用。

    还需要注意的就是,这里只是改变了显示,想要保存到指定文档中,需要重定向。

 

   源文件/脚本文件

   sed -f script-file file

   sed命令可以使用脚本文件,-f后面可以为相应的脚本文件,值得注意的是,脚本文件中不使用撇号

  

  限制行

  编辑器默认查看输入到流编辑器中的每一行,且默认在输入到流编辑器中的每一行上进行编辑。这可以通过在发出命令之前指定约束条件来进行修改。例如

  sed '3,4 s/fault/problem/' file 默认将第三行和第四行的fault值进行替换


  禁止显示

  "-n" 覆盖了所有的显示,并且不显示任何一行,而无论它们是否被编辑操作修改。


2.删除行

   sed '{what to find} d'

   删除相应的行,这里由what to find限制到某一特定行

  上三角号 (^) 表示一行的开始

  美元符号 ($) 代表文件的结尾,或一行的结尾

 

  sed '/fault/ d ' file

  删除file中包含fault的行

  sed '/fault/ !d' file

 删除file中包含fault之外的所有行

  sed '/^$/ d' {filename}

  删除文件中的所有空白行

  sed ‘1,/^$/ d’ {filename}

  删除文件中第一行到第一个空行


3.插入/添加/写到文件

  sed '3i *****'  从第三行插入

  sed '3a*****'  从第三行添加

  sed ‘×××××× 1,3w new_file’ 重新将第一行到第三行写到新文件中


4.修改

sed '/file/ c **************'

修改这里是指,将匹配到的整行进行修改,将原来的整行修改为新的内容,只要匹配,整行进行替换



 

^: 表示句首. 如 ^abc 表示以 abc 为首的句子.
$: 表示句尾. 如 abc$ 表示以 abc 结尾的句子.
\<: 表示词首. 如 \<abc 表示以 abc 为首的詞.

\>: 表示词尾. 如 abc\> 表示以 abc 結尾的詞.


本文主要参考:

http://flierlh.iteye.com/blog/132809

http://fangfang0717.blog.51cto.com/236466/130525/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28888次
    • 积分:411
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:19篇
    • 译文:1篇
    • 评论:5条
    最新评论