1. 基本操作.
a. $ echo "aabbcc" | sed -e 's/bb/dd/' ###對標準輸入進行替換.
終端的輸出爲: aaddcc.
b. $ sed -e 's/aaa/bbb/' 0<$input_file 1>$output_file ###將輸入文件的所有行首次出現的aaa字符串替換爲bbb.
's/.../.../g'模式爲每行全替換.
c. $ echo "aabbcc" | sed -e 's_bb_dd_' #同a.
可以自由選擇不同的分界符Delimiter, 只要不和找尋的字符串混淆即可.
d. $ echo "aabbcc" | sed -e 's/cc/## & ##/' ###’&’可以用來表示模式匹配的字符串.
終端的輸出爲: aabb## cc ##.
2. 擴展.
a. $ echo "abcdef" | sed 's/./&:/4' ### . 匹配單一字符, /4表示替換第四次匹配.
終端的輸出爲: abcd:ef.
b. $ echo "bc" | sed -n 's/a/b/p' ###/p只打印有匹配成功的行.
終端的輸出爲:空.
c. $ echo "abc" | sed -n 's/a/b/w output' ###/w 將匹配的行寫入到文件output, 可爲空.
文件output 內容: bbc.
d. $ echo "abc" | sed -e 's/a/A/' -e 's/b/B/' ###通過-e選項, 由sed並行匹配.
終端的輸出爲:ABc.
3. 問題:
a. why difference between:
echo abcd123ddc | sed 's//([a-z]*/).*//1/' #輸出爲: abcd
echo abcd123ddc | sed 's//([a-z]*/).//1/' #輸出爲: abcd23ddc
提示: 正則式是最大貪婪性的,第一式的/([a-z]*/) 匹配了abcd, .* 匹配了所有餘下的123ddc; 第二式的/([a-z]*/) 匹配了abcd, .匹配1. 即abcd1被匹配爲abcd.
b. echo "111aaa222bbb333dddd" | sed 's/^[a-z]*//2' not work?
src: http://www.grymoire.com/Unix/Sed.html