我正在尝试搜索服务器上名为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命令,它也是如此。有人能指出我出错的地方吗?
答案 0 :(得分:2)
/
替换文本,\/
也用作替换分隔符。逃避它:'
-print
find
是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"
):
{{1}}