我有一堆 java 文件,我想从中删除带有许可证的 javadoc 行 [我在我的代码上更改它]。
我正在寻找的模式是
^\* \* ProjectName .* USA\.$
但跨行匹配
有没有办法 sed [或 Windows/Linux 中常用的编辑器] 可以搜索/替换多行模式?
这是我最喜欢的 sed 教程中的适当参考点。
可能有人仍在不时寻找这样的解决方案。这是一个。
使用 awk 查找要删除的行。然后使用 diff 删除行并让 sed 清理。
awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
| diff - input.txt \
| sed -n -e"s/^> //p" \
>output.txt
警告说明:如果第一个模式存在而第二个不存在,您将丢失第一个模式下方的所有文本 - 所以首先检查。
是的。您是否使用 sed、awk、perl 或其他工具来解决此问题?
大多数正则表达式工具允许您指定多行模式。请注意过于贪婪的正则表达式,否则它们会匹配注释之间的代码(如果存在)。
这是一个例子:
/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
打印出所有一起运行的评论。(?: 符号必须用于非捕获括号。/ 不必转义,因为 ! 分隔表达式。-0777 用于启用 slurp 模式,-n 用于启用自动读取。
(来自: http: //ostermiller.org/findcomment.html)