sed的常用語法總結及示例
Sed的基本用法
概念及作用
sed和grep類似,也是一種檔案編輯器 sed是一個流編輯器,所謂流編輯器是指sed每次只從檔案或stdin中讀入一行,將讀入的行儲存至模式空間然後根據指定的要求對其進行處理,並將處理後的結果輸出至螢幕,接著讀入下一行,整個文字的過程如流水線般被逐行處理後輸出。 sed主要用來自動編輯一個或多個檔案,可以將資料進行增刪改查等特定工作,簡化對檔案的反覆操作.
格式
sed [引數] ‘命令’ 檔案
引數
-f :將sed的動作寫在一個檔案內,用–f filename 執行filename內的sed動作; -i :直接修改檔案內容,(沒有備份時慎重操作); -n :只打印模式匹配的行,與grep相似 -r :支援擴充套件表示式;
命令
a\ 在當前行下面插入文字; i\ 在當前行上面插入文字; c\ 把當前行改為新的文字; d 刪除,將選擇的內容刪除 D 刪除模板第一行 s 替換指定字元 (最常用) p 列印模板塊的行。(常常和 -n配合使用) P 列印模板塊的第一行;
標記
g 表示行內全部替換,ng表示第n個匹配的開始進行替換 w 表示把行寫入一個檔案 \1 字串匹配標記(劃重點) & 已匹配字串標記
部分測試
1. 替換
echo book | sed 's/book/books/'
將book替換為books
先將777和test寫入到cs檔案中,然後使用 sed命令將test替換為TEST,再用-n p 組合檢視
sed 's/test/TEST/' cs
sed -n 's/test/TEST/p' cs
可以看到,通過使用-n p 執行sed之後就只顯示經過修改的結果.
2. 全域性替換
echo sksksksksksk | sed 's/sk/SK/ng'
這裡能看出g的作用, 當n=1時,這段程式碼就是將每一個sk替換為SK, 為2時,從第二個開始的sk換為SK 以此類推 ng就是從第n個開始,將字元進行替換
3. 刪除
拷貝一份passwd,新增幾個空行
sed '/^$/d' passwd | head -10
刪除空白行
接著對沒有空白行的文字進行操作
刪除第二行
sed '2d' passwd
sed '2,$d' passwd
從這裡可以發現’n,md’是刪除n-m行(包括n和m)
字串標記
在正則中,用\w\+
匹配每一個單詞
在sed中,&則表示匹配到的字元
echo "this is a test line" | sed 's/\w\+/[&]/g'
這個命令用來給匹配到的每一個單詞加上[]
子串匹配(重點)
我們假定a b c d
為一個字串,那麼a
b
c
d
則為 a b c d
的四個子串
在搞懂這個概念之後,進行如下命令
echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4/'
這一段命令是分別匹配了
a b c d
的四個子串,然後輸出第四個子串
echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4\3\2\1/'
而這一段命令則是將匹配的子串倒序輸出,且中間沒有隔斷
echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4,\3,\2,\1/'
這一段則是用’,'隔開
對子串進行一個剖析
這後面的\4\3\2\1分別對應子串4,子串3 ,子串2,子串1
另外,子串的匹配方式應和原文字保持一致,不然會匹配不到
選定範圍
在sed中,範圍的用’,(逗號)’
例如我們前面的刪除第二行之後的所有就用了2-$
($和以前一樣,表示結尾,同樣^和以前一樣表示開頭)
在passwd中新增一行test
列印從第5行開始一直到第一個以test開頭的行之間的所有內容
sed -n '5,/^test/p' passwd
追加
追加分為行上(a),行下(i),本行
行上追加
就是在匹配到的行前面一行進行追加操作
sed '/^test/i\777' passwd
在以test開頭的行前追加 ‘777’
行下追加
在匹配到的行下面一行進行追加
sed '/^test/a\777' passwd
這裡是在以test開頭的行下面一行追加777
本行追加
本行追加又有在匹配到的字元後直接追加和在行尾追加兩種
- 字元後追加
sed 's/^test/&777/' passwd
這裡使用了&代表匹配到的test
- 在行末追加
sed '/test/s/$/777/' passwd
這裡是先對test匹配,然後在末尾使用替換命令,就可以完成在行末追加內容的操作
各種正則也適用於sed表示式 sed主要用於檔案的行處理,列處理我們常用的是awk,後面還會對awk進行學習