Linux命令:查找和;使用正则表达式替换不能按预期工作

时间:2013-10-06 14:20:03

标签: regex linux shell ssh replace

我正在尝试使用regex命令替换所有php文件中的路径,但它没有按预期工作!

我想将'/home/example/public_html替换为$_SERVER['DOCUMENT_ROOT'] . '

我在ssh中使用以下命令:

find /var/www/advertise/ -name '*.php' -type f -exec sed -i 's/\'\/home\/example\/public_html/\$\_SERVER\[\'DOCUMENT\_ROOT\'\]\ \.\ \'/g' {} \;

当我输入命令并点击返回时,>符号如下:

>

>

> ..等等,因为我一直按回执行命令。

以下命令的位置完美(将home/example/public_html替换为var/www):

find /var/www/advertise/ -name '*.php' -type f -exec sed -i 's/home\/example\/public_html/var\/www/g' {} \;

1 个答案:

答案 0 :(得分:1)

你搞砸了报价。

  • 使用/以外的分隔符,以便您无需转义/
  • 您无需在替换
  • 中逃脱
  • 由于替换中有',因此最好使用"s#..#..#"(即双引号)。但是,您需要在替换中转义$以防止shell尝试扩展。

以下内容可能适合您:

find /var/www/advertise/ -name '*.php' -type f -exec sed -i "s#'/home/example/public_html#\$_SERVER['DOCUMENT_ROOT'] . '#g" {} \;