学习sed,我想将以下输入行的驱动器号从“a”更改为“d”:
http:/a/foo/bar.txt
http:/a/bar/foo.txt
file:/a/foobar.txt
http:/b/foo/bar.txt
http:/c/foobar.txt
我正在使用以下sed表达式:
sed 's_^\(http|file\):/a_\1:/d_' in.txt
即:如果一行以“http”或“file”开头,则以“:/ a”开头,将协议捕获为组1,并将“a”替换为“d”。或者至少它应该是。
然而,我似乎无法获得交替运算符'|'上班。如果我只为组使用'http'或'file',那么命令就会按预期运行,如果我对组使用'http | file',那么这些行都不匹配:
mbook:sed rob$ sed 's_^\(http\):/a_\1:/d_' in.txt
http:/d/foo/bar.txt
http:/d/bar/foo.txt
file:/a/foobar.txt
http:/b/foo/bar.txt
http:/c/foobar.txt
mbook:sed rob$ sed 's_^\(file\):/a_\1:/d_' in.txt
http:/a/foo/bar.txt
http:/a/bar/foo.txt
file:/d/foobar.txt
http:/b/foo/bar.txt
http:/c/foobar.txt
mbook:sed rob$ sed 's_^\(http|file\):/a_\1:/d_' in.txt
http:/a/foo/bar.txt
http:/a/bar/foo.txt
file:/a/foobar.txt
http:/b/foo/bar.txt
http:/c/foobar.txt
答案 0 :(得分:4)
答案 1 :(得分:2)
转义|
或使用扩展正则表达式
sed -r 's_^(http|file):/a_\1:/d_'