从多个文件中删除多行文本

时间:2008-10-06 14:23:30

标签: sed grep multiline

我有一堆java文件,我想从中删除带有许可证的javadoc行[在我的代码中更改它]。

我正在寻找的模式是

^\* \* ProjectName .* USA\.$

但跨行匹配

sed [或Windows / Linux中常用的编辑器]是否可以对多行​​模式进行搜索/替换?

3 个答案:

答案 0 :(得分:3)

这是我最喜欢的sed教程中的appropriate reference point

答案 1 :(得分:0)

是。你使用sed,awk,perl或其他东西来解决这个问题吗?

大多数正则表达式工具允许您指定多行模式。只是要小心过于贪婪的正则表达式,否则它们会匹配注释之间的代码(如果它存在)。

以下是一个例子:

/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
  

打印出所有评论   一起。 (?:符号必须是   用于非捕获括号。 /   不必逃脱,因为!   界定表达式。使用-0777   启用slurp模式和-n启用   自动阅读。

(来自:http://ostermiller.org/findcomment.html

答案 2 :(得分:0)

可能有人仍在不时寻找这样的解决方案。这是一个。

使用awk查找要删除的行。然后使用diff去除线条并让sed清理。

awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
  | diff - input.txt \
  | sed -n -e"s/^> //p" \
  >output.txt

警告说明:如果存在第一个模式而第二个模式不存在,则会丢失第一个模式下面的所有文本 - 因此请先检查该模式。