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