我有一堆java文件,我想从中删除带有许可证的javadoc行[在我的代码中更改它]。
我正在寻找的模式是
^\* \* ProjectName .* USA\.$
但跨行匹配
sed [或Windows / Linux中常用的编辑器]是否可以对多行模式进行搜索/替换?
答案 0 :(得分:3)
这是我最喜欢的sed教程中的appropriate reference point。
答案 1 :(得分:0)
是。你使用sed,awk,perl或其他东西来解决这个问题吗?
大多数正则表达式工具允许您指定多行模式。只是要小心过于贪婪的正则表达式,否则它们会匹配注释之间的代码(如果它存在)。
以下是一个例子:
/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
打印出所有评论 一起。 (?:符号必须是 用于非捕获括号。 / 不必逃脱,因为! 界定表达式。使用-0777 启用slurp模式和-n启用 自动阅读。
答案 2 :(得分:0)
可能有人仍在不时寻找这样的解决方案。这是一个。
使用awk查找要删除的行。然后使用diff去除线条并让sed清理。
awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
| diff - input.txt \
| sed -n -e"s/^> //p" \
>output.txt
警告说明:如果存在第一个模式而第二个模式不存在,则会丢失第一个模式下面的所有文本 - 因此请先检查该模式。