3

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

我正在寻找的模式是

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

但跨行匹配

有没有办法 sed [或 Windows/Linux 中常用的编辑器] 可以搜索/替换多行模式?

4

3 回答 3

3

这是我最喜欢的 sed 教程中的适当参考点

于 2008-10-06T14:25:13.167 回答
1

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

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

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

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

于 2014-10-10T14:22:05.900 回答
0

是的。您是否使用 sed、awk、perl 或其他工具来解决此问题?

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

这是一个例子:

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

打印出所有一起运行的评论。(?: 符号必须用于非捕获括号。/ 不必转义,因为 ! 分隔表达式。-0777 用于启用 slurp 模式,-n 用于启用自动读取。

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

于 2008-10-06T14:34:48.810 回答