簡介
sed 採用的是流編輯模式:
最明顯的特色是,在 sed 處理數據以前,須要預先提供一組規則,sed 會按照此規則來編輯數據。
sed 會根據腳本命令來處理文本文件中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個文本文件中。
此命令執行數據的順序以下:
1. 每次僅讀取一行內容。根據提供的規則命令匹配並修改數據。
注意,sed 默認不會直接修改源文件數據,而是會將數據複製到緩衝區中,修改也僅限於緩衝區中的數據;
2. 將執行結果輸出。
3. 當一行數據匹配完成後,它會繼續讀取下一行數據,並重復這個過程,直到將文件中全部數據處理完畢。
sed 基本選項
sed [選項] [腳本命令] 文件名
選項
-e 腳本命令,該選項會將其後跟的腳本命令添加到已有的命令中。
-f 腳本命令文件,該選項會將其後文件中的腳本命令添加到已有的命令中。
-n 默認狀況下,sed 會在全部的腳本指定執行完畢後,會自動輸出處理後的內容,
而該選項會屏蔽啓動輸出,需使用 print 命令來完成輸出。
-i 此選項會直接修改源文件,要慎用。
查找替換
s
查找替換腳本命令。此命令的基本格式爲:
[address]s/pattern/replacement/flags
address 表示指定要操做的具體行,
pattern 指的是須要替換的內容,
replacement 指的是要替換的新內容。
flags標記
選項
n 1~512 之間的數字,表示指定要替換的字符串出現第幾回時才進行替換,
例如,一行中有 3 個 A,但用戶只想替換第二個 A,這是就用到這個標記;
g 對數據中全部匹配到的內容進行替換,
若是沒有 g,則只會在第一次匹配成功時作替換操做。
p 會打印與替換命令中指定的模式匹配的行。此標記一般與 -n 選項一塊兒使用。
w file 將緩衝區中的內容寫到指定的 file 文件中;
& 用正則表達式匹配的內容進行替換;
\n 匹配第 n 個子串,該子串以前在 pattern 中用 \(\) 指定。
\ 轉義(轉義替換部分包含:&、\等)。
sed -n "s/aa[a-z]aa/aa666aa/p" ld
查找替換並打印
常見命令
a\string 在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用「\」續行
c\ 用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每行末尾需用"\"續行
i\ 在當前行以前插入文本。多行時除最後一行外,每行末尾需用"\"續行
d 刪除行
h 把模式空間裏的內容複製到暫存緩衝區
H 把模式空間裏的內容追加到暫存緩衝區
g 把暫存緩衝區裏的內容複製到模式空間,覆蓋原有的內容
G 把暫存緩衝區的內容追加到模式空間裏,追加在原有內容的後面
l 列出非打印字符
p 打印行
n 讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理
q 結束或退出sed
r 從文件中讀取輸入行
! 對所選行之外的全部行應用命令
s 用一個字符串替換另外一個
g 在行內進行全局替換
w 將所選的行寫入文件
x 交換暫存緩衝區與模式空間的內容
y 將字符替換爲另外一字符(不能對正則表達式使用y命令)
示例
sed "2d" ld
刪除第二行
sed "/[0-9]/d" ld
用正則匹配數字的行並刪除
sed "/12/d" ld
匹配12的行並刪除