sed工具

9.4-9.5 sed命令

sed是一種流編輯器,它是文本處理中很是中的工具,可以完美的配合正則表達式使用,功能與衆不同。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操做;編寫轉換程序等。ios

sed用法

使用sed能夠實現grep的大部分功能,並且還能夠查找替換。正則表達式

語法:
sed [options] 'command' filename
sed [options] -f scriptfile filenameexpress

Options:
-n:-n選項和p命令一塊兒使用表示打印
-e:等價於--expression,多點編輯,在一行執行多條命令vim

eg:bash

  • 用sed實現匹配(grep)功能=打印有root字符串的行
[root@1 sed]# sed -n '/root/'p test.txt
root:x:0:0:roprot:/root:/bin/bash

[root@1 sed]# sed -nr '/o+t/'p test.txt  (當‘//’中間有特殊字符時須要脫義,使用脫義符‘\’或使用-r表示脫義,等同於egrep)
root:x:0:0:roprot:/root:/bin/bash
Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin

忽略大小寫(I)編輯器

[root@1 sed]# sed -n '/nologin/'Ip test.txt  忽略大小寫
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
……
  • 打印指定行(p)
[root@1 sed]# sed -n '2'p test.txt  打印第二行
bin:x:1:1:bin:/bin:/sbin/Nologin

[root@1 sed]# sed -n '2,4'p test.txt
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c

[root@1 sed]# sed -n '7,$'p test.txt
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

打印全部內容:
[root@1 sed]# sed -n p test.txt 
(內容太多不作演示)
  • -e選項容許在同一行裏執行多條命令:
[root@1 sed]# sed -e '1'p -e '/daemon/'p -n test.txt
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@1 sed]# sed -e '1'p -e '/root/'p -n test.txt
root:x:0:0:roprot:/root:/bin/bash
root:x:0:0:roprot:/root:/bin/bash

解析: 「sed -e '1'p -e '/daemon/'p -n test.txt」該命令的意思是:打印第一行,同時也打印出匹配有‘daemon’的行。當打印的內容和匹配的內容相同時,會分別顯示,即:兩個命令同時進行但相對獨立。工具

  • 刪除指定行(d)
[root@1 sed]# sed '3,$'d test.txt
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin

注: 這種方法並不會刪除文件的內容,知識打印在屏幕上的內容刪除了指定行。那麼如何直接刪除文件中指定的內容呢?以下:spa

[root@1 sed]# wc -l test.txt
12 test.txt
[root@1 sed]# sed -i '3,$'d test.txt
[root@1 sed]# wc -l test.txt
2 test.txt

[root@1 sed]# cat test.txt
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin

[root@1 sed]# sed -i '/root/'d test.txt
[root@1 sed]# cat !$
cat test.txt
bin:x:1:1:bin:/bin:/sbin/Nologin
  • 查找替換(s) 相似於vim中的查找替換
[root@1 sed]# sed '1,3s/root/ROOT/g' test.txt |head -3
ROOT:x:0:0:roprot:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
注:此處若是不使用head命令,將會顯示test.txt所有內容。

替換每行第一個字符串和最後一個字符串的位置:code

替換前:
[root@1 sed]# head -3 test.txt 
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
替換後:
[root@1 sed]# head -3 test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
/bin/bash:x:0:0:roprot:/root:root
/sbin/Nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon

說明: 小括號內的字符串能夠用反斜槓跟數字組合按順序來代替。orm

刪除內容(替換爲空便可)

[root@1 sed]# head -3 test.txt |sed -r 's@[a-zA-Z]@@g'
::0:0::/://
::1:1::/://
::2:2::/://

在每一行行首添加指定字符:

[root@1 sed]# head -3 test.txt |sed -r 's/(.*)/A:&/'
A:root:x:0:0:roprot:/root:/bin/bash
A:bin:x:1:1:bin:/bin:/sbin/Nologin
A:daemon:x:2:2:daemon:/sbin:/sbin/nologin

說明: 在此&表明前面括號中的內容=「\ 1」

[root@1 sed]# head -3 test.txt |sed -r 's/(.*)/A:\1/'
A:root:x:0:0:roprot:/root:/bin/bash
A:bin:x:1:1:bin:/bin:/sbin/Nologin
A:daemon:x:2:2:daemon:/sbin:/sbin/nologin
相關文章
相關標籤/搜索