我花了几个小时搜索,找不到解决方法。我有一个包含超过1,000个PHP文件的目录。我需要更换这些文件中的一些代码,如下所示:
查找:
var ulWidth = 0;
$j(function() {
ulWidth = ulWidth + $j('ul.product-selection > li').width();
$j('ul.product-selection > li > ul').css({'left': ulWidth});
});
替换为(保存在replacement.txt:
session_register("CurWebsiteID");
使用下面的命令,我可以用 $(cat replacement.txt)替换模式,而我正在寻找用文本文件的内容替换它们。
正在使用的命令:
if(!function_exists ("session_register") && isset($_SERVER["DOCUMENT_ROOT"])){require_once($_SERVER["DOCUMENT_ROOT"]."/libraries/phpruntime/php_legacy_session_functions.php");} session_register("CurWebsiteID");
我还尝试使用变量代替find . -name "*.xml" | xargs -n 1 sed -i -e 's/mercy/$(cat replacement.txt)/g'
并使用replacement=code_above;
运行调整后的版本,但这也无济于事。
实现这一目标的正确方法是什么?
答案 0 :(得分:5)
这里不需要命令替换。您可以使用sed d
命令插入文件内容,使用find . -name "*.xml" | xargs -n 1 sed -i -e '/mercy/r replacement.txt' -e '//d'
删除与模式匹配的行:
setInterval
答案 1 :(得分:2)
$(...)
不会在单引号内解释。使用双引号:
find . -name "*.xml" | xargs -n 1 sed -i -e "s/mercy/$(cat replacement.txt)/g"
您也可以取消cat
:
find . -name "*.xml" | xargs -n 1 sed -i -e "s/mercy/$(< replacement.txt)/g"
如果replacement.txt
中包含/
,请在sed
表达式中使用不同的分隔符,例如@
:
find . -name "*.xml" | xargs -n 1 sed -i -e "s@mercy@$(< replacement.txt)@g"
另见: