Next: pattern/hold space的處理
Up: sed command命令
Previous: sed command命令
  Contents
就是先把這幾個編輯命令學好啦
- Append a
\
找到address後append所有a\
後面所有字串
- Change c
\
改變一段文字
- Delete d 砍掉regex找到的字串那一行,記住是整行砍掉喔
- Insert i
\
找到address後在前面insert字串
- Substitution s/// 代換是最常用的
- Translate y/// 可以一個字元一個字元作不同的代換
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