这个问题在哲学上类似于在这里一次又一次出现的问题:
但是他们(除了最后一个)都处理简单的替换。我有一个很大的代码块出现在许多文件中(我希望复制/粘贴源代码受到法律惩罚),我需要替换它。
有什么能帮到我的吗?我想避免“sed”if the block(就像上面第三个类似问题中所做的那样)因为这将花费一天的大部分时间。如果我必须暂时安装一些特定的文本编辑器,那就这样吧。
答案 0 :(得分:5)
关于你的问题的好处是你正在处理固定字符串而不是正则表达式...这使得问题相对简单。您可以write something为您完成工作而不会出现太多问题。
我链接到的解决方案不是最佳的,但它确实有效,并且它不依赖于只匹配开/关线(也就是说,它只取代逐字匹配)。基本思路是:
答案 1 :(得分:1)
如果开始和结束行是唯一的,您可以删除该块并使用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
这样每个文件只能找到一个块的出现。一如既往,先做好备份。