我使用 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
的输出)。
我在多个文件上运行它无济于事。第一种模式有问题吗?
答案 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个反斜杠。