这个问题在哲学上是相似的来了一次又一次的在这里一个问题:
- 搜索和在linux目录下的所有文件替换文本
- 如何搜索替换在Ubuntu Linux操作系统的文件中的内容?
- Linux的搜索和替换一个复杂的字符串
但是,他们(与最后一个除外)都处理简单的替代品。 我有一个出现在许多文件中的代码稍微大的块(我希望复制/粘贴的源代码是受法律惩罚),我需要更换。
有什么,这将帮助我在这里? 我想避免“sed的” ifying块(如在上面的第三个类似的问题做了),因为这将需要一天的大部分时间。 如果我不得不暂时安装一些特定的文本编辑器,就这样吧。
关于你的问题的好处是,你正在处理的固定字符串,而不是正则表达式...这使得问题相对简单。 你可以写的东西做的工作对你没有太多的问题。
我已链接到解决的办法是不是最佳的,但它的工作,它不依赖于仅匹配开/关线(即,只替换匹配逐字)。 其基本思路是:
- 阅读,它定义了我们要找的文件中,
- 请阅读我们的定义替换该文件中,
- 遍历所有的其他参数,寻找搜索字符串并用替换文本替换它
如果打开和关闭线是唯一的,你可以删除该块,并使用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
这只能找到每个文件块的一个次数。 与往常一样,先进行备份。