1. 程式人生 > 其它 >shell指令碼三劍客之sed

shell指令碼三劍客之sed

shell指令碼之sed命令

1、概述

2、工作流程

3、命令格式

4、具體操作

1、概述:

1.sed是一種流編輯器,流編輯器會在編輯器處理資料之前基於預先提供一組規則來編輯資料流
2.sed編輯器可以根據命令來處理資料流中的資料,這些命令要麼從命令列中輸入,要麼儲存在一個命令文字檔案中

  

2、工作流程:讀取、執行、顯示

1.讀取:sed從輸入流 (檔案、管道、標準輸入) 中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space)
2.執行:預設情況下,所有的sed命令都在模式空間中順序地執行,除非指定了行的地址,否則sed命令將會在所有的行上依次執行
3.顯示:傳送修改後的內容到輸出流。在傳送資料後,模式空間將會被清空。在所有的檔案內容都被處理完成之前,上述過程將重複執行,直至所有內容被處理完
注:在所有的檔案內容都被處理完成之前,上述過程將重複執行,直至所有內容被處理完。 預設情況下所有的sed命令都是在模式空間內執行的,因此輸入的檔案並不會發生任何變化,除非是用重定向儲存輸出

  

3、sed 命令格式:

sed [選項] ‘操作’ 檔名

sed -e  ‘操作’ 檔案1 檔案2 .....

sed -n -e ‘操作’ 檔案1 檔案2 .....

sed -f 指令碼檔案 檔案1 檔案2 .....

sed -i -e  ‘操作’ 檔案1 檔案2 .....
 

sed -e ‘n{

操作1

操作2

...

}’ 檔案1 檔案2...

常用選項:

選項說明
-e或--expression= 表示用指定命令來處理輸入的文字檔案,只有一個操作命令時可省略,一般在執行多個操作命令使用
-f或--file= 表示用指定的指令碼檔案來處理輸入的文字檔案
-h--help 顯示幫助
-n、--quiet或silent 禁止sed編輯器輸出,但可以與p命令一起使用完成輸出
-i 直接修改目標文字檔案

常用操作:

操作說明
s 替換,替換指定字元
d 刪除,刪除選定的行
a 增加,在當前行下面增加一行指定內容
i 插入,在選定行,上面插入一行指定內容
c 替換,將選定行替換為指定內容
y 字元轉換,轉換前後的字元長度必須相同
p 列印,如果同時指定行,表示列印指定行;如果不指定行,則表示列印所有內容;如果有非列印字元,則以ASCII碼輸出。其通常與“-n”選項一起使用
= 列印行號
l (小寫L)
列印資料流中的文字和不可列印的ASCII字元(比如結束符$、製表符\t)

列印內容:

sed -n -e 'p' 1.txt (進行'p'列印操作如果不使用-n禁止sed編輯器輸出,會每行列印兩遍)

4、具體操作:

sed編輯器有2種定址方式:

  1. 以數字形式表示行區間
  2. 用文字模式來過濾出行

列印操作:

刪除行:

替換:

格式:
行範圍 s/舊字元 /新字元 /替換標記:

四種替換標記:

  1. 數字:表明新字串將替換第幾處匹配的地方
  2. g:表明新字元將會替換所有匹配的地方
  3. p:列印與替換命令匹配的行,與-n一起使用
  4. w 檔案:將替換的結果寫到檔案中

插入:

自古英雄多磨難