Sed 从多个文件中删除多行文字

Sed 从多个文件中删除多行文字,sed,grep,multiline,Sed,Grep,Multiline,我有一堆java文件,我想从中删除带有许可证的javadoc行[我在代码中更改它] 我正在寻找的模式是 ^\*\*项目名称。*美国\.$ 但在不同的领域里是一致的 sed[或Windows/Linux中常用的编辑器]是否有一种方法可以搜索/替换多行模式?以下是我最喜欢的sed教程中的内容。是的。您是使用sed、awk、perl还是其他方法来解决这个问题 大多数正则表达式工具允许您指定多行模式。只需小心过于贪婪的正则表达式,否则它们会在注释之间匹配代码(如果存在) 下面是一个例子: /\*(?:.

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

我正在寻找的模式是

^\*\*项目名称。*美国\.$

但在不同的领域里是一致的


sed[或Windows/Linux中常用的编辑器]是否有一种方法可以搜索/替换多行模式?

以下是我最喜欢的sed教程中的内容。

是的。您是使用sed、awk、perl还是其他方法来解决这个问题

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

下面是一个例子:

/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
/\*(?:.|[\r\n])*\*/
perl-0777ne'打印m/\*(?:.|[\r\n])*?\*/!g、 "
打印出运行时的所有注释 在一起(?:符号必须为 用于非捕获括号/ 不必逃脱,因为! 限定表达式。使用-0777 要启用slurp模式,请启用-n 自动阅读


(From:)

可能仍有人时不时地在寻找这样的解决方案

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

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

警告:如果第一个模式存在,而第二个模式不存在,您将丢失第一个模式下的所有文本-因此首先检查该模式。

这看起来很棒!。除了
diff
是哑模式之外!如果文件中有类似SSH2密钥的模式,并且您正试图删除其中一个,请不要使用此模式。它将从文件顶部占用一行然后从其他地方归档其余文件。