sed 的用法

sed概述:

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

使用格式:[root@linux ~]# sed [-nefr] [動作] sed [option]‘{ command}’datafile

常用的sed option

-e script 指定sed編輯命令

-f scriptfile 指定的文件中是sed編輯命令

-n 靜默模式,抑制來自sed命令執行過程中的冗餘輸出信息,比如只顯示那些被改變的行。

-i[SUFFIX], –in-place[=SUFFIX] 替換和備份源文件

參數p: 打印匹配行

# sed -n ’2p’/etc/passwd 打印出第2行

# sed -n ’1,3p’/etc/passwd 打印出第1到第3行

# sed -n ‘$p’/etc/passwd 打印出最後一行

# sed -n ‘/user/p’ /etc/passwd 打印出含有user的行

# sed -n ‘/\$/p’ /etc/passwd 打印出含有$元字符的行,$意爲最後一行

# sed -n ‘$=’ ok.txt    打印總行數


參數a和i: 插入文本和附加文本(插入新行)


# sed -n ‘/FTP/p’/etc/passwd 打印出有FTP的行

# sed ‘/FTP/a\ 456′ /etc/passwd 在含有FTP的行後面新插入一行,內容爲456

# sed ‘/FTP/i\ 123′ /etc/passwd在含有FTP的行前面新插入一行,內容爲123

# sed ‘/FTP/i\ “123″’ /etc/passwd在含有FTP的行前面新插入一行,內容爲”123″

# sed ’5 a\ 123′ /etc/passwd 在第5行後插入一新行,內容爲123

# sed ’5 i\ “12345″’ /etc/passwd 在第5行前插入一新行,內容爲”123表達式45″


sed-搜索結果後面增加嵌入代碼


#!/bin/bash

#export LANG=zh_CN

find ./ -name “*.html” -exec grep 10000008/100 ‘{}’ \; -exec sed -i ‘/10000008/a\<\!--\# include file=\"\/code.html\"--\>‘ {} \;

#


參數d:刪除文本 刪空格


sed -i ‘s/[ ]*//g’ ~/$cid.txt

刪除無內容空行


sed ‘/^$/d’ file.conf > file.new.conf

sed -i ‘/^$/d’ ~/$cid.txt

刪第一行


sed -i ’1d’ ~/$cid.txt

刪前兩行


sed -i ’1,2d’ ~/$cid.txt

del多行


cat SCTP.log |sed ’1d;2d;$d’

刪除最後一行


sed -e ‘$d’ file

刪除最後兩行


sed ‘N;$!P;D’ file

sed ‘N;$!P;$!D;$d’ file

刪除最後n行


$vi sed.sh

$!/bin/bash

A=$(sed -n ‘$=’ file)

sed $(($A-n+1)),${A}d file


$ sed ‘/user/d’/etc/passwd

刪除帶有string的行(del include love row head)


sed -i ‘/^love/d’ file

sed -i ‘/love/d’ file

vi刪除包含strings前4行,後34行


:/strings/-4,+34d

刪除配置文件中#號註釋行


sed ‘s#\#.*##’ file.conf > file.new.conf

sed ‘s,\#.*,,’

刪除配置文件中//號註釋行


sed ‘s#//.*##’ file.conf > file.new.conf

sed ‘s@//.*@@’

刪除由空格和Tab而成的空行


sed ‘/^[[:space:]]*$/d’ file.conf > file.new.conf

sed ‘/^[[:space:]]*$/d’

刪除尾行的空格


sed -e ‘s/.$//’ file > file.new.conf

在尾行添加1個空格


sed ‘s/[0-9]$/& /g’ file > flile.new.conf


參數s:替換文本,替換命令用替換模式替換指定模式

格式爲:[ a d d r e s s [,address]] s/pattern-to-find/replacement-pattern/[g p w n]


$ sed ‘s/user/USER/’/etc/passwd 將第1個user替換成USER,g表明全局替換

$ sed ‘s/user/USER/g’/etc/passwd 將所有user替換成USER

$ sed ‘s/user/#user/’/etc/passwd 將第1個user替換成#user,如用於屏蔽作用

$ sed ‘s/user//’/etc/passwd 將第1個user替換成空

$ sed ‘s/user/&11111111111111/’/etc/passwd 如果要附加或修改一個很長的字符串,可以使用( &)命令,&命令保存發現模式以便重新調用它,然後把它放在替換字符串裏面,這裏是把&放前面

$ sed ‘s/user/11111111111111&/’/etc/passwd 這裏是將&放後面

在包含字符串test的任意行上,將111替換成222 $ sed ‘/test/s/111/222/g’ sample.txt


快速一行正則表達式命令

下面是一些一行命令集。([ ]表示空格,[TAB]表示t a b鍵)


‘s/\ . $//g’ 刪除以句點結尾行

‘-e/abcd/d’ 刪除包含a b c d的行

‘s/[ ] [ ] [ ] */[ ]/g’ 刪除一個以上空格,用一個空格代替

‘s/^ [ ] [ ] *//g’ 刪除行首空格

‘s/\ . [ ] [ ] */[ ]/g’ 刪除句點後跟兩個或更多空格,代之以一個空格

‘/^ $/d’ 刪除空行

‘s/^ .//g’ 刪除第一個字符

‘s/COL \ ( . . . \ )//g’ 刪除緊跟C O L的後三個字母

‘s/^ \///g’ 從路徑中刪除第一個\

‘s/[ ]/[TAB]//g’ 刪除所有空格並用t a b鍵替代

‘S/^ [TAB]//g’ 刪除行首所有t a b鍵

‘s/[TAB] *//g’ 刪除所有t a b鍵


用sed刪除文件中的換行符,殺雞哪需牛刀?

tr -d ‘\n’ file

真的需要sed

sed -nr ‘ H;

$ {

x;

s/\n//g;

p

}’


sed獲取ip

[root@c01 ~]# ifconfig eth0|sed -ne ‘s/^.*addr:\([0-9.]*\).*$/\1/p’

192.168.100.180


[root@c01 ~]# ifconfig eth0 | sed -e ‘/inet/!d’ -e ‘s/.*addr://’ -e ‘s/[ ].*//’

192.168.100.180


\/轉義字符

echo /usr/local/bin | sed ‘s/\/usr\/local\/bin/\/common\/bin/’

find . -name “*.html” |xargs sed -i ‘s#/canApp/evaluation/html/   index.html#http://www.wallcopper.com/eva/#g’

都可以把當前目錄下的.c .h文件中的TAB替換成4個空格。

find . -name “*.[c|h]” | xargs sed -i ‘s/\t/ /g’


參數f:

以下三個命令相等,先在包含字符串test的任意行上,將111替換成222,再將字符f替換成hello


$ sed ‘/test/s/111/222/g ; s/f/hello/g’ sample.txt

$ sed -e ‘/test/s/111/222/g’ -e ‘s/f/hello/g’ sample.txt

選項-f: 將要執行的所以編譯命令放入在文件中


$ more scher

/test/s/111/222/g

s/f/hello/g’ sample.txt

$ sed -f scher sample.txt


參數q:表示跳離sed。最多與一個地址參數配合。

打印出含有a或b字符的行,一旦遇到數字,即刻停止打印。


$ sed -n -e ‘/[0-9]/q’ -e ‘/[a b]/p’

到china quit

sed ‘china/q’ myfile.txt


參數-i後綴:替換並將源文件備份改後綴

$ sed -i.bak ‘s/123/efg/g’ a.txt 備份源文件


參數r:在某行插入文件

$ sed -i ’2 r readfile.txt’ writefile.txt


參數w:讀入文件中的內容存入到另一文件中(temp.txt)。最多與一個地址參數配合。

將sample.txt文件中含test字符串的數據行,copy至temp.txt檔中儲存(原temp.txt中無內容)

$ sed -e ‘/test/w temp.txt’ sample.txt


參數y:轉換數據中的字符。最多與兩個地址參數配合。

1.將文件中的小寫字母替換成大寫字母。

$ sed -e ‘y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ sample.txt

其中前後字符個數必須相同.


參數!:表示不執行函數參數。

將文件中除了important字符串,其餘全刪除。

$ sed -e ‘/important/!d’ sample.txt


參數=:表示印出資料的行數。最多與兩個地址參數配合。

1.印出文件資料並顯示行數。

$ sed -e ‘=’ sample.txt

計算總行數

$ sed -n ‘$=’ a.txt


其它參數

參數#:表示對文字的註釋。


參數N:表示添加下一筆資料到pattern space內。最多與兩個地址參數配合。(添加下一筆:添加一筆資料後,繼續添加這個資料的下一行數據到pattern space內) 1,將文件中的數據合併。文件內容如下: UNIX LINUX

$ sed -e ‘N’ -e’s/\n/\,/g’ sample.txt

結果如下: UNIX,LINUX


參數D:表示刪除pattern space內的第一行資料。最多與兩個地址參數配合。


參數P:打印出pattern space內的第一行資料。


$ sed -n -e ‘N’ -e ‘P’ sample.txt

利用N將下一行資料(即:偶數行)添加到pattern space內,在利用P打印出奇數行。 解釋過程:由於N的作用,使得每次添加一條資料到pattern space後,先不執行操作,而是繼續添加這個資料的下一行到pattern space內, 然後P參數打印出第一行資料。


參數h:表示暫存pattern space的內容至hold space(覆蓋)。最多與兩個地址參數配合。


參數H:表示暫存pattern space的內容至hold space(添加)。最多與兩個地址參數配合。


參數g:表示將hold space的內容放回至pattern space內。(覆蓋掉原pattern space內的數據)


參數G:表示將hold space的內容放回至pattern space內。(添加大到原pattern space數據之後)


將文件中所有空行刪除,並在每一行後面增加一個空行。


$ sed ‘/^$/d;G’ sample.txt

將文件中所有空行刪除,並在每一行後面增加兩個空行。


$ sed ‘/^$/d;G;G’ sample.txt

參數x:表示交換hold space與pattern space內的數據。


將文件第三行的數據替換成第一行的數據。


$ sed -e ’1h’ -e ’3x’ sample.txt


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