sed-流式編輯器

1.sed(流編輯器)背景知識

(1)sed命令行的基本格式爲:

sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 .

(2)sed處理的文件:既可以由標準輸入重定向得到,也可以當命令行參數傳入,命令行參數可以一次傳入多個文件,sed會依次處理。

(3)sed的編輯命令:可以直接當命令行參數傳入,也可以寫成一個腳本文件然後用-f參數指定。

(4)編輯命令的格式爲:/pattern/action

  1. pattern是正則表達式,action是編輯操作。

  2. sed程序一行一行讀出待處理文件,

  • 如果某一行與pattern匹配,則執行相應的action;

  • 如果一條命令沒有pattern而只有action,這個action將作用於待處理文件的每一行。

(5)sed工作原理

  1. sed 是一種在線編輯器,它一次處理一行內容。

  2. 處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。

  3. 文件內容並沒有改變,除非你使用重定向存儲輸出。

  4. Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;


2.使用

(1)/pattern/p :打印匹配pattern的行

  1. 注意:把原文件內容和匹配pattern的行都打印出來(即再源文件的基礎上再打印匹配的行)

  2. 只想輸出處理結果,加上-n選項

(2)/pattern/d :刪除匹配pattern的行

  1. 注意:sed命令不會修改原文件,刪除命令只表示某些行不打印輸出,而不是從原文件中刪去。

  2. 想修改原文件可使用sed -i。

(3)/pattern/s/pattern1/pattern2/:查找符合pattern的行,將該行第一個匹配pattern1的字符串替換爲pattern2

  1. 若想把文本所有的滿足條件的都替換加上g,即/pattern/s/pattern1/pattern2/g

  2. pattern2中若出現&:表示原文件的當前行中與pattern1相匹配的字符串


  • pattern2中的\1表示與pattern1的第一個()括號相匹配的內容;\2表示與pattern1的第二個()括號相匹配的內容。

  • sed默認使用Basic正則表達式規範,如果指定了-r選項則使用Extended規範,那麼()括號就不必轉義了。

(4)定址

sed -n ‘3p’ file        #打印第三行
sed -n ‘100,300p’ file  #打印100~300行的信息(包括100和300)

(5)命令

a\ :在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行
c\ :用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每行末尾需用”\"續行
i\ :在當前行之前插入文本。多行時除最後一行外,每行末尾需用”\"續行d刪除行
h : 把模式空間裏的內容複製到暫存緩衝區
H :把模式空間裏的內容追加到暫存緩衝區
g :把暫存緩衝區裏的內容複製到模式空間,覆蓋原有的內容
G:把暫存緩衝區的內容追加到模式空間裏,追加在原有內容的後面
l :列出非打印字符
p :打印行
n :讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理
q :結束或退出sed
r :從文件中讀取輸入行
! :對所選行以外的所有行應用命令
s :用一個字符串替換另一個
g :在行內進行全局替換
w :將所選的行寫入文件
x :交換暫存緩衝區與模式空間的內容
y :將字符替換爲另一字符(不能對正則表達式使用y命令)
-e :進行多項編輯,即對輸入行應用多條sed命令時使用
-n :取消默認的輸出
-f :指定sed腳本的文件名

(6)退出狀態

不管是否找到指定的模式,它的退出狀態都是0。只有當命令存在語法錯誤時,sed的退出狀態纔不是0。


3.練習

(1)給每行結尾添加一行空行

wKiom1dw8NiwCc6dAABMKc9-ytg569.png

(2)用sed模擬出tac的功能(倒序輸出)

wKiom1dw8W3xGV6OAABYSzTQbCk761.png

  • 1!G:第1行不執行“G”命令,從第2行開始執行。(可以通過右圖的對比-少1!,最後輸出多一行空行)

  • $!d:最後一行不刪除(保留最後1行)

把數據追加到模式空間(第一行除外),然後把它賦值到保持空間,再把它從模式空間刪除(最後一行除外)。

(3)追加匹配行到文件結尾

wKioL1dw8ZjyWktgAAA7513TZjM577.png

(4)行列轉化

wKiom1dw8bCAJK78AAAaeYe755o438.png

(5)求1~100的求和

方法一:

wKioL1dw8cuifRgYAAA-6vOQsso555.png

方法二:

wKioL1dw8f-ijJIUAAA9UHxmXAA405.png

(6)打印奇偶數行

wKiom1dw8eeSiRdiAAAxNMSMSr8915.png




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章