gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:31 39 4
gpt4 key购买 nike

我正在尝试搜索我服务器上名为 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'

它只是让我看到 > 的提示,并没有继续......

我也尝试过对单个文件使用相同的 sed 命令,效果相同。有人可以指出我哪里做错了吗?

最佳答案

  • 您正在用 / 替换文本,它也用作替换定界符。像这样转义:\/
  • 无需在替换两边加上双引号,因为它们已经存在于 html 字符串中。
  • 在整个 sed 表达式周围使用双引号,以避免与 '
  • 冲突
  • -printfind 的默认操作,可以跳过。

试试这个:

find . -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"

关于linux - 使用 sed 替换包含引号和单引号的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867579/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com