【问题标题】:Escaping SED command转义 SED 命令
【发布时间】:2013-04-05 03:06:15
【问题描述】:

我正在尝试运行一个脚本来替换大量 .php 文件中的一段代码。我需要更换:

`popupOpen(\'/home/open.php?c='.urlencode($row['id']).'&s=\', 650, 600)` 

用这个:

`popupOpen(\'/home/open.php?c='.urlencode($row['id']).'&s=\', 1024, 750)`

我使用的命令是:

find . -name "index.php" -print | xargs sed -i "s/popupOpen(\\\'\/home\/open.php?c='.urlencode\($row\['id']\).'\&s=\\\', 650, 600)/popupOpen(\\\'\/home\/open.php?c='.urlencode\($row\['id']\).'\&s=\\\', 1024, 750)/g"

我似乎无法正确逃避它。我错过了什么?

【问题讨论】:

  • 你说了很多文件,但你只是在寻找index.php
  • 我将运行该命令的地方有大约 120 个文件夹,每个文件夹都有 index.php。
  • 在我看来您只需将 650 替换为 1024 并将 600 替换为 750
  • 我可以缩短命令以使其更简单,但我想知道究竟需要转义什么,以防将来必须运行可能更复杂的类似命令。
  • 你还需要转义$,否则$row会被shell扩展(可能是空字符串)......也许你应该考虑将sed脚本放入一个文件中用sed -f script 调用它。让逃跑更容易。

标签: php linux sed escaping


【解决方案1】:

你可以不用xargs

find .name "index.php" -exec sed -i '' sed "whatever" {} \;

在这种情况下,我认为这会起作用:

find . -name "index.php" -exec sed "s|popupOpen(\\\\'/home/open\.php\?c=\'\.urlencode(\\\$row\[\'id\'\])\.\'&s=\\\\', 650, 600)|popupOpen(\\\\'/home/open\.php\?c=\'\.urlencode(\\\$row\[\'id\'\])\.\'\&s=\\\\', 1024, 750)|g" {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2017-04-04
    • 2017-01-24
    • 2015-07-14
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多