4

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

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

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

4

2 回答 2

5

关于您的问题的好处是您正在处理固定字符串而不是正则表达式......这使得问题相对简单。您可以编写一些东西来为您完成这项工作,而不会出现太多问题。

我链接到的解决方案不是最佳的,但它确实有效,并且它不依赖于仅匹配开头/结尾行(也就是说,它只替换逐字匹配)。基本思想是:

  • 读入定义我们正在寻找的文件,
  • 读入定义我们替换的文件,
  • 遍历所有其他参数,查找搜索字符串并将其替换为替换文本
于 2012-05-11T19:45:11.953 回答
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

这只会发现每个文件出现一次块。与往常一样,首先进行备份。

于 2012-05-11T19:39:50.767 回答