1. 程式人生 > 其它 >文字三劍客之sed

文字三劍客之sed

目錄

一、sed編輯器的概述

1、sed編輯器的概念

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

2、sed編輯器的工作流程

sed 的工作流程主要包括讀取、執行和顯示三個過程∶

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

在所有的檔案內容都被處理完成之前,上述過程將重複執行, 直至所有內容被處理完。
注意∶ 預設情況下所有的sed命令都是在模式空間內執行的,因此輸入的檔案並不會發生任何變化,除非是用重定向儲存輸出。

3、sed命令的格式

第一種:
sed -e '操作' 檔案1 檔案2
 
第二種:
sed -n -e '操作' 檔案1 檔案2
 
第三種:
sed -f 指令碼檔案 檔案1 檔案2
 
第四種:
sed -i -e '操作' 檔案1 檔案2

4、sed命令的常用選項

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

5、sed命令的常用操作

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

r:是讀命令。sed使用該命令將一個文字檔案中的內容加到當前檔案的特定位置上。

二、sed對文字的操作方式

1、列印內容

1.2 列印某行檔案內容,指定行號


  

1.3 列印檔案內容的行號 =


  

1.4 l(小寫L)∶列印資料流中的文字和不可列印的ASCII字元(比如結束符$、製表符\t)


  

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

• 以數字形式表示行區間

• 用文字模式來過濾出行

2.1 以數字形式表示行區間一:列印指定的行

2.2 以數字形式表示行區間二:列印奇數行、偶數行

2.3 以數字形式表示行區間三:列印間隔行(一行或者多行)

2.4 用文字模式來過濾出行 一:過濾文字所在的行

2.5 用文字模式來過濾出行 二:-r表示支援擴充套件正則表示式


  

3、刪除內容

3.1 刪除指定行的內容

3.2 刪除包含指定內容的行

4、替換內容

4.1 格式

sed  行範圍 s/舊字串/新字串/替換標記

4.2 四種替換標記:

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

4.3、替換指定字元,並指定替換第幾處或者替換所有(替換所有用g)

4.4 替換空值,表示刪除


  

4.5 指定行範圍進行替換,並將替換結果儲存到指定檔案中


  

4.6 sed 行範圍 s/舊字串/新字串/替換標記 ,該格式中的/可用其他符號或者字母數字替代,只要保持一致即可,如#、?等等

當被替換的內容中包含/,則替換時會出現多個/,容易混淆,則可用其他符號或者字母數字替代,保持一致即可  

4.7 sed將篩選出的內容用w將其儲存到指定檔案

  

5、插入內容

5.1 c: 替換,將選定行替換為指定內容


    

5.2 y: 字元轉換,轉換前後的字元長度必須相同


  

5.3 a: 增加,在當前行下面增加一行指定內容

5.4 i: 插入,在選定行上面插入一行指定內容


 

5.5 r命令是讀命令。sed使用該命令將一個文字檔案中的內容加到當前檔案的特定位置上

5.6 將輸出的字元進行調整順序


  

5.7 將輸出的字元進行互換位置(第1個字元與第2個字元、第1個字元與最後1個字元)

每行文字拆分為“第1個字元(.)”、“第2個字元(.)”、“剩下的所有字元(.*)”三個部分,然後通過替換操作重排順序為“3-2-1”

  

三、剪下複製貼上內容

1、模式空間與保持空間概念

  • 模式空間:存放當前處理的行,將處理結果輸出

​ 若當前行不符合處理條件,則原樣輸出,處理完當前行再讀入下一行來處理

  • 保持空間:作用類似於“剪貼簿”;預設存放一個空行(換行符\n)

2、剪下複製的基本動作(G、g、H、h)

複製:H:模式空間---[追加]--->保持空間

​ h:模式空間---[覆蓋]--->保持空間

貼上:G:保持空間---[追加]--->模式空間

​ g:保持空間---[覆蓋]--->模式空間

剪下:複製結合d(刪除)一起使用

3、例項操作

3.1 將指定的行的內容複製到指定的位置

3.2 將指定的內容剪下到指定的位置