1 sed動(dòng)作,sed每次讀取一行,然后對(duì)這一行處理完成后再處理下一行。
(1),/是常用的定界符,但任何可顯示的字符都能作為定界符(分號(hào),冒號(hào),逗點(diǎn))。
(2),通過-e先項(xiàng)可以給予sed多個(gè)命令。
sed –e‘s/foo/bar/g’ –e ‘s/chicken/cow/g’ file > file2
(3),當(dāng)對(duì)一個(gè)文件要編多個(gè)命令時(shí)可以放到一個(gè)文件中,用-f選項(xiàng)指定
sed–f sedfile myfile > myfile2
(4),-n選項(xiàng)打印行
sed–n ‘/test/p’ file 打印file中有test的行。
(5),匹配特定的行,如要限制命令應(yīng)用到某些行,只要在命令前置一個(gè)地址就可以了。
addresscommand
有不同的地址類型。
A,正則表達(dá)式。這個(gè)很常用
/oldfunc/s/$/#XXX:migrate to newfun/
/Tolstoy/s//& and camus/g s命令里的空模式指使用前一個(gè)正則表達(dá)式。
B,最終行$
sed–n ‘$p’ 打印文件的最后一行。
C,行編號(hào)??梢允褂媒^對(duì)的行編號(hào)作為地址。
D,范圍,將地址以逗點(diǎn)分開。
E, 否定的正則表達(dá)式。
/used/!s/new/used/g 將沒有used的每個(gè)行里的所有new改為used
(6), 在模式里使用不同的界定符,在字符前加上一個(gè)反斜杠實(shí)現(xiàn)。
sed–n ‘\:Tolstoy: s;;Tolstoy;p’ /etc/passwd
(7),匹配區(qū)間
echotolstoy is worldly | sed 's/t.*y/camus/' 會(huì)輸郵camus這個(gè)模式匹配了一整行。
echotolstoy is worldly | sed 's/t[[:alpha:]]*y/camus/' 這個(gè)才會(huì)正確匹配tolstoy
echoabc | sed 's/b*/1/g' 會(huì)輸出
echoabc | sed 's/b[[:alpha:]]*/1/g' 會(huì)輸出a1
sed‘s/;/home/tolstoy/;/home/lt/;’ file 把file里的/home/tolstoy都改為/home/lt/
sed–e ‘s://:123456:’ file.c > temp1.c
sed–e ‘s:///:123456:’ temp1.c > temp2.c
sed–e ‘/123456/s:$:*/:’ temp2.c > temp1.c
sed–e ‘s:123456:/*:’ temp1.c > temp2.c
說明:
‘s://:123456:’為用123456替換每一行中第一次出現(xiàn)的”//” ,如果想要替換一行中的所有”//”用這樣’s://:123456:g’
‘/123456/s:$:*/:’為與123456相匹配的行尾加個(gè)”*/”, $表示行尾。^表示行首.
2 替換,
A, 使用s命令,要求正則表達(dá)式尋找,用替代文本替換匹配的文本。
sed‘s/:.*//’ testfile > test2 刪除第一個(gè)冒號(hào)后的所有字符。
Sed–e ‘/condition/s:sourcestr:deststr:’ sfile > dfile
B,sed了解向后引用。
sed‘s;\(home\)/tolstoy;\1/lt;’ file sed 將\1替代為匹配于正則表達(dá)式/home的部分。
C,&在sed 中表示從此點(diǎn)開始替代成匹配于正則表達(dá)式的整個(gè)文本。
D,以g結(jié)尾表示全局替換,如果沒有g表示只替換第一個(gè)。
sed‘s/\\/\\/g’ file 把file中的反斜線替換成\
E,還可以在結(jié)尾指定數(shù)字,指示第n個(gè)匹配出現(xiàn)才要被替換。
sed‘s;today;yytoday;
3 加行
Sed–e ‘/condition/a\ newlinetext’ sfile > dfile 加到指定行后
Sed–e ‘/condition/i\ newlinetext’ sfile > dfile 加到指定行前
4 刪除
Sed–e ‘/condition/d’ sfile > dfile
刪除有”svn-base”的行 sed -e /svn-base/d fRet2.txt> fRet3.txt
5 sed -e 's:$:test:' temp.c > temp2.c
每一行后加一個(gè)test
6 sed –e ‘s:^:test’ temp.c > temp2.c
每一行前加一個(gè)test
7 打印匹配的行
sed-n '/123/p' fRet.txt > fRet2.txt
sed -e nq files 打印files文件的前n行
8 注意用反斜線來轉(zhuǎn)義字符
如 * 寫為\*
打印有*的行sed -n '/\*/p' fRet.txt > fRet2.txt
實(shí)例:把文件中的// ///換為用/**/注釋
for f in $(ls *.h *.c)
do
if[ -f "$f" ]; then
echo"$f"
sed-e 's:///:123456:' $f > temp1
sed-e 's://:123456:' temp1 > temp2
sed-e '/123456/s:$:*/:' temp2 > temp1
if[ ! -d dest ] ; then
mkdirdest
fi
echo copy result file "$f" to dest dir
sed-e 's:123456:/*:' temp1 > ./dest/$f
fi
done
rm temp1 temp2
聯(lián)系客服