使用sed替换包含引号和单引号的文本

时间:2014-01-01 10:17:44

标签: linux search sed find xargs

我正在尝试搜索服务器上名为index.php的所有文件,然后使用xargs运行sed来替换这些文件中的某些文本。

我想找的是:

echo '<form method="get" class="search_form" action="'.$siteUrl.'">';

更换后,它应该是这样的:

echo '<form method="get" class="search_form" action="/">';

因此,我真的只需要将'.$siteUrl.'更改为单个/

但是,当我尝试从SSH提示符运行此命令时(我认为是正确的):

find . -name "index.php" -print | xargs sed -i 's/\'\.\$siteUrl\.\'/"/"/g'

它只是让我看到&gt;的提示并且不再进一步......

我也尝试在单个文件上使用相同的sed命令,它也是如此。有人能指出我出错的地方吗?

1 个答案:

答案 0 :(得分:2)

  • 您正在用/替换文本,\/也用作替换分隔符。逃避它:'
  • 不需要在替换项周围放置双引号,因为它们已经存在于html字符串中。
  • 在整个sed表达式周围使用双引号,以避免与-print
  • 发生冲突
  • findfind . -name "index.php" | xargs sed -i "s/'\.\$siteUrl\.'/\//g" 的默认操作,可以跳过。

试试这个:

:

或者为sed使用不同的分隔符,例如/并删除find . -name "index.php" | xargs sed -i "s:'\.\$siteUrl\.':/:g" 之前的转义:

-i.bak

哦,最好保存已编辑文件的备份(find . -name "index.php" | xargs sed -i.bak "s:'\.\$siteUrl\.':/:g" ):

{{1}}