这种模式中的bug传递给sed在哪里?

时间:2017-07-02 09:35:43

标签: sed

我使用 sed 替换某些文件中的某些字符串。我尝试使用此模式匹配"命名空间Foo \ BarBundle \ Tests \ blah \ blah" 等字符串:

^\\(namespace\|use\\)\s\*Foo\BarBundle\Tests\\(.\*\\)$

但它没有用。完成命令如下:

sed -i -e "s/$pattern/\1 Tests\\Foo\BarBundle\2/g" <file_name>

$pattern是上述模式。 (这是echo $pattern的输出)。

我在多个文件上运行它无济于事。第一种模式有问题吗?

2 个答案:

答案 0 :(得分:1)

使用3个反斜杠\\\指定常规后挡板\

pattern="^\(namespace\|use\)\s*Foo\\\BarBundle\\\Tests\(.*\)$"
sed -e "s/$pattern/\1 Tests\\\Foo\\\BarBundle\2/g" <file_name>

前两个\\在shell中成为一个,然后在 sed 中逃脱第三个\

答案 1 :(得分:-2)

如果要在标准输入和脚本中匹配单个反斜杠,则必须使用4个反斜杠。