next up previous contents
Next: pattern/hold space的處理 Up: sed command命令 Previous: sed command命令   Contents

基本指令

就是先把這幾個編輯命令學好啦 a\ 命令與i\命令,注意a\ i\ 都要換行才開始要加入的文字。如果要加的文字 有換行要用\ 這個符號表示換行,如果要加入的文字有\, 可以用\\來escape掉\。不過這邊有很大的問題, 也就是如果文字裡面同時有\ '怎麼辦。 由於shell中的單引號 ' 沒辦法逃掉,這個只得另寫script檔解決。請看例子
	cyril@gyoza:~$ cat last
	第一行
	最後一行

	cyril@gyoza:~$ sed 'a\
	> 中文試試看
	> ' last
	第一行
	中文試試看
	最後一行
	中文試試看

	cyril@gyoza:~$ sed '$a\
	> 中文試試看 並且故意想辦法超過一行看看不做任何處理時  超過一行時
	> sed會怎麼樣處理這樣的問題
	> ' last
	sed: -e expression #1, char 93: Unterminated `s' command

	cyril@gyoza:~$ sed '$a\
	> 中文試試看 並且故意想辦法超過一行看看不做任何處理時  超過一行時\
	> sed會怎麼樣處理這樣的問題
	> ' last
	第一行
	最後一行 
	中文試試看 並且故意想辦法超過一行看看不做任何處理時  超過一行時
	sed會怎麼樣處理這樣的問題
	
	cyril@gyoza:~$ cat address.txt
	台北市建國南路一段
	270號
	<Michele's Address>
	<Cyril's Address>
	台北市松江路
	一段10號
	<Nick's Address>
	
	cyril@gyoza:~$ cat insert.sed
	/<Cyril's Address>/i\
	100 Gyoza Blvd\
	San Jose, CA
	
	cyril@gyoza:~$ sed -f inser.sed address.txt
	台北市建國南路一段
	270號
	<Michele's Address>
	100 Gyoza Blvd
	San Jose, CA
	<Cyril's Address>
	台北市松江路
	一段10號
	<Nick's Address>
c\ change這個命令跟a\ i\ 很像,只有一點要注意, 就是如果要改變的文字跨很多行,則 adress是個range 1,10這樣時,所有的range行都會消失,並且只有一行改變了。
	cyril@gyoza:~$ cat last
	第一行  first line
	第二行  second line
	最後一行  last line

	cyril@gyoza:~$ cat change.sed 
	1,2c\
	第一行跟第二行都被幹掉了
	
	cyril@gyoza:~$ sed -f change.sed last
	第一行跟第二行都被幹掉了
	最後一行  last line
小寫變大寫
	把第一行到第十行中的小寫變大寫
	$ sed '1,10y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' lower.txt
代換的命令中有很重要的第二層處理,如果在一行內的字串吻合要代換的有很多 個,那麼內定會用第一個吻合的換掉,如果想換掉特定的就在後面加上想要的 第幾個,想全部換掉用g這個flag
	cyril@gyoza:~$ cat last
	第一行  first line
	第二行  second line
	最後一行  last line

	cyril@gyoza:~$ sed 's/first/line/1' last
	第一行  line line
	第二行  second line
	最後一行  last line

	cyril@gyoza:~$ sed 's/first/line/2' last
	第一行  first line
	第二行  second line
	最後一行  last line

	cyril@gyoza:~$ cat lines
	第一行  first line
	第二行  second line
	很多行  multiple line line
	最後一行  last line

	cyril@gyoza:~$ sed 's/line/row/2' lines
	第一行  first line
	第二行  second line
	很多行  multiple line row
	最後一行  last line

	cyril@gyoza:~$ sed 's/line/row/g' lines
	第一行  first row
	第二行  second row
	很多行  multiple row row
	最後一行  last row


Cyril Huang 2002-06-14