【问题标题】:Linux Command: Find & Replace using regex not woking as expectedLinux 命令:使用正则表达式查找和替换未按预期工作
【发布时间】:2013-10-06 14:20:02
【问题描述】:

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

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

我在 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' {} \;

【问题讨论】:

    标签: regex linux shell ssh replace


    【解决方案1】:

    你把引号弄乱了。

    • 使用/ 以外的分隔符,这样您就不需要转义/
    • 替换中不用逃跑
    • 既然你有' 在替换,最好使用"s#..#..#"(即双引号)。但是,您需要转义替换中的 $ 以防止外壳尝试扩展。

    以下可能对您有用:

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

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2014-04-28
      相关资源
      最近更新 更多