搜索并替换linux中所有文件中的代码块

时间:2012-05-11 19:20:32

标签: linux search replace

这个问题在哲学上类似于在这里一次又一次出现的问题:

但是他们(除了最后一个)都处理简单的替换。我有一个很大的代码块出现在许多文件中(我希望复制/粘贴源代码受到法律惩罚),我需要替换它。

有什么能帮到我的吗?我想避免“sed”if the block(就像上面第三个类似问题中所做的那样)因为这将花费一天的大部分时间。如果我必须暂时安装一些特定的文本编辑器,那就这样吧。

2 个答案:

答案 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

这样每个文件只能找到一个块的出现。一如既往,先做好备份。