shell學習 sed用法的例項

2021-08-28 07:11:01 字數 3861 閱讀 1723

替換文字中的字串:

sed 's/book/books/' file
-n選項p命令一起使用表示只列印那些發生替換的行:

sed -n 's/test/test/p' file

sed -i 's/book/books/g' file
使用字尾 /g 標記會替換每一行中的所有匹配:

sed 's/book/books/g' file
當需要從第n處匹配開始替換時,可以使用 /ng:

echo sksksksksksk | sed 's/sk/sk/2g'

sksksksksksk

echo sksksksksksk | sed 's/sk/sk/3g'

sksksksksksk

echo sksksksksksk | sed 's/sk/sk/4g'

sksksksksksk

以上命令中字元 / 在sed中作為定界符使用,也可以使用任意的定界符:

sed 's:test:text:g'

sed 's|test|text|g'

定界符出現在樣式內部時,需要進行轉義:

sed 's/\/bin/\/usr\/local\/bin/g'
刪除空白行:

sed '/^$/d' file
刪除檔案的第2行:

sed '2d' file
刪除檔案的第2行到末尾所有行:

sed '2,$d' file
刪除檔案最後一行:

sed '$d' file
刪除檔案中所有開頭是test的行:

sed '/^test/'d file
正規表示式 \w\+ 匹配每乙個單詞,使用 [&] 替換它,& 對應於之前所匹配到的單詞:

echo this is a test line | sed 's/\w\+/[&]/g'

[this] [is] [a] [test] [line]

所有以192.168.0.1開頭的行都會被替換成它自已加localhost:

sed 's/^192.168.0.1/&localhost/' file

192.168.0.1localhost

匹配給定樣式的其中一部分:

echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'

this is 7 in a number

命令中 digit 7,被替換成了 7。樣式匹配到的子串是 7,\(..\) 用於匹配子串,對於匹配到的第乙個子串就標記為\1,依此類推匹配到的第二個結果就是\2,例如:

echo aaa bbb | sed 's/\([a-z]\+\) \([a-z]\+\)/\2 \1/'

bbb aaa

love被標記為1,所有loveable會被替換成lovers,並列印出來:

sed -n 's/\(love\)able/\1rs/p' file
sed '表示式' | sed '表示式'

等價於:

sed '表示式; 表示式'

sed表示式可以使用單引號來引用,但是如果表示式內部包含變數字串,就需要使用雙引號。

test=hello

echo hello world | sed "s/$test/hello"

hello world

所有在模板test和check所確定的範圍內的行都被列印:

sed -n '/test/,/check/p' file
列印從第5行開始到第乙個包含以test開始的行之間的所有行:

sed -n '5,/^test/p' file
對於模板test和west之間的行,每行的末尾用字串aaa bbb替換:

sed '/test/,/west/s/$/aaa bbb/' file
-e選項允許在同一行裡執行多條命令:

sed -e '1,5d' -e 's/test/check/' file
上面sed表示式的第一條命令刪除1至5行,第二條命令用check替換test。命令的執行順序對結果有影響。如果兩個命令都是替換命令,那麼第乙個替換命令將影響第二個替換命令的結果。

和 -e 等價的命令是 --expression:

sed --expression='s/test/check/' --expression='/love/d' file
file裡的內容被讀進來,顯示在與test匹配的行後面,如果匹配多行,則file的內容將顯示在所有匹配行的下面:

sed '/test/r file' filename
在example中所有包含test的行都被寫入file裡:

sed -n '/test/w file' example
將 this is a test line 追加到 以test 開頭的行後面:

sed '/^test/a\this is a test line' file
在 test.conf 檔案第2行之後插入 this is a test line:

sed -i '2a\this is a test line' test.conf
將 this is a test line 追加到以test開頭的行前面:

sed '/^test/i\this is a test line' file
在test.conf檔案第5行之前插入this is a test line:

sed -i '5i\this is a test line' test.conf
sed '/test/' file
把1~10行內所有abcde轉變為大寫,注意,正規表示式元字元不能使用這個命令:

sed '1,10y/abcde/abcde/' file
列印完第10行後,退出sed

sed '10q' file
在sed處理檔案的時候,每一行都被儲存在乙個叫模式空間的臨時緩衝區中,除非行被刪除或者輸出被取消,否則所有被處理的行都將 列印在螢幕上。接著模式空間被清空,並存入新的一行等待處理。

sed -e '/test/h' -e '$g' file
在這個例子裡,匹配test的行被找到後,將存入模式空間,h命令將其複製並存入乙個稱為保持快取區的特殊緩衝區內。第二條語句的意思是,當到達最後一行後,g命令取出保持緩衝區的行,然後把它放回模式空間中,且追加到現在已經存在於模式空間中的行的末尾。在這個例子中就是追加到最後一行。簡單來說,任何包含test的行都被複製並追加到該檔案的末尾。

互換模式空間和保持緩衝區的內容。也就是把包含test與check的行互換:

sed -e '/test/h' -e '/check/x' file
sed指令碼是乙個sed的命令清單,啟動sed時以-f選項引導指令碼檔名。sed對於指令碼中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文字,如果在一行中有多個命令,要用分號分隔。以#開頭的行為注釋行,且不能跨行。

sed [options] -f scriptfile file(s)
方法1:

sed -n 'p;n' test.txt  #奇數行

sed -n 'n;p' test.txt #偶數行

方法2:

sed -n '1~2p' test.txt  #奇數行

sed -n '2~2p' test.txt #偶數行

grep -a 1 scc urfile

sed -n '/scc/' urfile

awk '/scc/' urfile

shell指令碼 sed的用法

sed在處理文字時是逐行讀取檔案內容,讀到匹配的行就根據指令做操作,不匹配就跳過。sed是linux下一款功能強大的非互動流式文字編輯器,可以對文字檔案進行增 刪 改 查等操作,支援按行 按欄位 按正則匹配文字內容,靈活方便,特別適合於大檔案的編輯。詳細用法參考 shell指令碼 sed的用法 se...

sed用法例項 (內容不全)

sed用法例項 1.替換命令 s 不改變原來檔案 sed s book bookall mysed sed n s book bookall mysed n 單獨使用不會輸出任何內容 sed s book bookall p mysed p 單獨使用,就是預設輸出 sed n s book book...

Shell指令碼的學習 sed

sed是流編輯器,對文字進行批量化處理。sed option script file1 file2 sed option f scriptfile file1 file2 sed 處理的檔案既可以由標準輸入重定向得到,也可以當命令列引數傳入,命令列引數可以一次傳入多個檔案,sed會依次處理。sed的...