这个问题在哲学上类似于这里一次又一次出现的问题:
但是它们(除了最后一个)都处理简单的替换。我有一大块代码出现在许多文件中(我希望复制/粘贴源代码会受到法律惩罚),我需要替换它。
有什么可以帮助我的吗?我想避免将块“sed”化(如上面第三个类似问题中所做的那样),因为这将花费一天的大部分时间。如果我必须临时安装一些特定的文本编辑器,那就这样吧。
这个问题在哲学上类似于这里一次又一次出现的问题:
但是它们(除了最后一个)都处理简单的替换。我有一大块代码出现在许多文件中(我希望复制/粘贴源代码会受到法律惩罚),我需要替换它。
有什么可以帮助我的吗?我想避免将块“sed”化(如上面第三个类似问题中所做的那样),因为这将花费一天的大部分时间。如果我必须临时安装一些特定的文本编辑器,那就这样吧。
关于您的问题的好处是您正在处理固定字符串而不是正则表达式......这使得问题相对简单。您可以编写一些东西来为您完成这项工作,而不会出现太多问题。
我链接到的解决方案不是最佳的,但它确实有效,并且它不依赖于仅匹配开头/结尾行(也就是说,它只替换逐字匹配)。基本思想是:
如果开始行和结束行是唯一的,您可以删除该块并将其替换为您的代码,使用 sed 使用:
placeholder=somereallyuniquestringthatwillneverbematched
for i in *.php; do
# Remove original block using first and last line matching and add placeholder
sed -i -e "/The text of the closing line/a\
$placeholder
/The Text of the opening Line/,/The Text Of The Closing Line/d" "$i"
# Replace placeholder with desired code
sed -i -e "s/$placeholder/#include ('include/menu.php');/" "$i"
done
这只会发现每个文件出现一次块。与往常一样,首先进行备份。