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

Posted

技术标签:

【中文标题】从多个文件中删除多行文本【英文标题】:Deleting multiline text from multiple files 【发布时间】:2010-09-15 12:36:55 【问题描述】:

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

我正在寻找的模式是

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

但跨行匹配

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

这看起来棒极了! .. 除了diff 是愚蠢的!如果您在文件中有 SSH2 密钥之类的模式,并且您正在尝试删除一个,请不要使用它。它将从文件顶部取一行,然后从其他地方取其余行。【参考方案2】:

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

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

这是一个例子:

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

打印出所有运行的 cmets 一起。 (?: 符号必须是 用于非捕获括号。 / 不必逃避,因为! 分隔表达式。使用-0777 启用 slurp 模式和 -n 启用 自动阅读。

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于从多个文件中删除多行文本的主要内容,如果未能解决你的问题,请参考以下文章

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

delphi写多行文本文件操作

快速保存多行文本

如何从python中的文本文档中删除所有标点符号和其他符号?

删除文件夹提示”该项目不在请确认该项目位置“

R:从文本文件运行多行 sql