linux sed 命令常見用法


在 linux 系統中,有三個強大的文本分析處理工具:grep  sed  awk,其中:

grep   用於搜索文本內容      =>     linux grep 命令常見用法

sed    用於編輯文本內容       =>     linux sed  命令常見用法

awk   用於處理和生成報表    =>     linux awk 命令常見用法

 

這幾個命令用來對數據流進行處理的,其工作原理都是將文件內容逐行讀入,逐行處理。

sed 的全稱是 “stream editor” (數據流編輯器),從這個名字也可以看出,sed 是以數據流的方式對文本內容進行編輯的,而最常見的用法就是對文本中的特定字符串進行替換或者刪除,下面結合實例簡單介紹 sed 命令的常見用法:

假設文件 fin.txt 中的內容如下:

hello Jobs
hello Pony hello Jack, hi Jack

 

1. 把每一行中的 Jack 替換成 Mark

sed  's/Jack/Mark/'  fin.txt
>> hello Jobs hello Pony hello Mark, hi Jack

sed 命令一般是寫在單引號內,引號內開頭的 s 表示替換(substitute),

需要注意的是,在默認情況下,sed 只會替換每行中匹配到的第一個字符串,所以上面例子中最后一行的第二個 Jack 沒有被替換,如果希望替換每一行中所有匹配到的字符串,需加在命令末尾上選項 g,比如:

sed  's/Jack/Mark/g'  fin.txt
>>
hello Jobs
hello Pony
hello Mark, hi Mark

注意這條命令並不會修改文件 fin.txt 的內容,只是將文件中的每一行讀入緩存,執行替換,然后輸出到屏幕,文件內容並沒有發生改變。

如果希望直接修改文件內容,可加上選項 “ -i ”

sed -i 's/Jack/Mark/g' fin.txt

 

2. 將 2~3 行中的 hello 替換成 hey

sed  '2,3s/hello/hey/g'  fin.txt
>>
hello Jobs
hey   Pony
hey   Jack,  hi Jack

這條命令開頭的 2,3 表示僅在第 2 至第 3 行執行替換

 

3. 找出包含字符 Pony 的那些行,將這些行中的 hello 替換成 hey

sed  '/Pony/s/hello/hey/g'  fin.txt
>>
hello Jobs
hey   Pony
hello Jack, hi Jack

這里的 Pony 是正則表達式,所以需要用 // 括起來

 

4. 刪除 2~3 行

sed  '2,3d'  fin.txt
>>
hello Jobs

命令中的 d 表示刪除(delete),執行之后第 2~3 行就被刪除了,僅剩下第一行

 

5. 刪除包含字符串 Pony 的行

sed  '/Pony/d'  fin.txt
>>
hello Jobs
hello Jack, hi Jack

這里的 Pony 也是正則表達式,所以用 // 括起來了

 

6. 刪除空白行

sed  '/^$/d'  fin.txt

這里的 ^ 匹配一行的開頭, $ 匹配一行的結尾,所以 /^$/ 就表示一行的開頭和結尾之間沒有任何內容,也就是空白行;

注意有時候有些空白行是包含空格的,這種情況就需要寫成:

sed  '/^\s*$/d'  fin.txt

其中 \s 表示空格, 星號 * 表示前面的字符重復 0 次或多次,所以這種寫法可以匹配那些包含任意個空格的空白行

 

7. 刪除不包含字符 Pony 的行

sed  '/Pony/\!d'  fin.txt

這里的感嘆號 ! 表示反選,也就是選擇那些不符合正則表達式 /Pony/ 的行, 右斜杠表示轉義, 因為在有些系統下 ! 會被識別成其他的意思

 

8. 在指定某一行的前面或者后面添加一行

sed -i '1i\welcome'  fin.txt
>>
welcome
hello Jobs
hello Pony
hello Jack,  hi Jack

 這里的 1 表示第一行, i 表示在這一行前面添加一行,如果要在第一行后面添加一行,則用字母 a :

sed -i  '1a\welcome'  fin.txt

字母 a 是 append ,在后面添加一行

字母 i  是 insert, 在前面添加一行

 

9. 在匹配行的前面或者后面添加一行

sed -i  '/Pony/a\welcome'  fin.txt
>>
hello Jobs
hello Pony
welcome
hello Jack,  hi Jack

 同樣,在后面添加一行用字母 a,在前面添加一行用字母 i

sed -i  '/Pony/i\welcome'  fin.txt

 

 

以上只是 sed 的常見用法,sed 的用法其實還有很多,

如果希望深入了解,建議參考相關書籍或者直接訪問 GNU sed 網站:

 http://www.gnu.org/software/sed/manual/sed.html

 

 

 

 

 

|--------------------------------------|

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM