在匹配之前在包含路径名的同一行上插入模式

时间:2014-01-21 20:20:38

标签: regex sed

如何使用sed注释掉包含完整路径名的行?

我知道sed几乎可以使用任何其他分隔符,但在这种情况下我不确定如何更改它。

测试文件:

cat test
/usr/share/test1.sh
/usr/share/test2.sh

预期产出:

sed '/\/usr\/share/s/^/#/' test
#/usr/share/test1.sh
#/usr/share/test2.sh

实际输出:

sed '|/usr/share|s|^|#|' test
sed: -e expression #1, char 1: unknown command: `|'

2 个答案:

答案 0 :(得分:2)

这是一种方式:

$ cat input
This is a line
/usr/share/test1.sh
/usr/share/test2.sh
/usr/bin/test.sh

$ sed 's@^\(/usr/share/\)@#\1@' input
This is a line
#/usr/share/test1.sh
#/usr/share/test2.sh
/usr/bin/test.sh

顺便说一句,你的例子是作品,她是一个更新版本:

$ sed '\|\/usr\/share|{s|^|#|}' input
This is a line
#/usr/share/test1.sh
#/usr/share/test2.sh
/usr/bin/test.sh

如果要在地址中为正则表达式使用不同的分隔符,则需要使用反斜杠启动地址。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '\|/usr/share|s|^|#|' test
相关问题