sed的用法

今天遇到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/

發佈了10 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章