学习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”开头,则将协议(protocol)捕获为组 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
最佳答案
关于regex - 交替与 sed 中的预期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236905/