正则表达式:删除包含“帮助”等的行

Posted

技术标签:

【中文标题】正则表达式:删除包含“帮助”等的行【英文标题】:Regex: Remove lines containing "help", etc 【发布时间】:2011-08-18 02:11:57 【问题描述】:

我有很长的命令文档。使用记事本++或正则表达式,我想删除所有包含“帮助”的行,包括keyboard_help等。

如何做到这一点?

【问题讨论】:

【参考方案1】:

使用正则表达式搜索:

^.*(help).*$

【讨论】:

删除部分呢? @PeterMortensen 查找\n\n,替换为``(无) 然而,在 Windows 中,可以使用 \r\n\r\n 并将其替换为空。【参考方案2】:

如果您在 Windows 上,请尝试 findstr。不需要第三方工具:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

它也支持正则表达式!只需阅读工具的帮助findstr /?

附:如果您想处理大的巨大文件(如 400 MB 日志文件),文本编辑器的内存效率不是很高,因此,正如有人已经指出的那样,命令行工具是走。但是 Windows 上没有 grep,所以...

我只是在一个 1 GB 的日志文件上运行它,实际上只用了 3 秒。

【讨论】:

“如果您使用的是 Windows,”等等,什么?我以为 Notepad++ 只适用于 Windows? @FaranAiki 也许,我不跟踪 OS Notepad++ 的用途。【参考方案3】:

Notepad++ 也可以做到这一点:

转到搜索菜单,Ctrl + F,然后打开 Mark 选项卡。

检查书签行(如果没有标记标签更新到当前版本)。

输入您的搜索词并点击全部标记

包含搜索字词的所有行都已添加书签。

现在进入菜单搜索书签删除书签行

完成。

【讨论】:

是的!它还有“删除未标记的行”,就像 grep,正是我需要的! 如何删除/复制所有书签的书签行之后的 3 个连续的后续行? 这种方法有效,但如果文件很大 (100MB) 并且很多项目都被添加了书签,那么标记它们会变得非常慢,尤其是“复制书签项目”。 Grep 更快(更好:) 检查 BOOKMARK LINE 在这里很重要,否则它将不起作用!。 这对我不起作用,书签行不要删除【参考方案4】:

在 Notepad++ 中执行此操作的另一种方法是全部在“查找/替换”对话框中并使用正则表达式:

Ctrl + h 调出查找替换对话框。

Find what: 文本框中包含您的正则表达式:.*help.*\r?\n(如果文件没有 Windows 行结尾,\r 是可选的)。

Replace with: 文本框留空。

确保选中搜索模式区域中的正则表达式单选按钮。然后点击Replace All,瞧!包含您的搜索词 help 的所有行均已删除。

【讨论】:

比使用标记选项卡更好的答案,因为这可以用于“在文件中查找” 确保使用反斜杠转义特殊字符,如括号。 确保取消选中“.matches newline” 更好的答案,因为更高的性能。对于超过 100 万行的文件,书签方法被拉伸到最大,在现代机器上也是如此。 这会导致下一行有时会被 TAB 缩进。为什么?【参考方案5】:

grep 的简单任务:

grep -v help filename

附加 > newFileName 以将输出重定向到新文件。


更新

为了澄清这一点,正常的行为是在屏幕上打印线条。要将其通过管道传输到文件,可以使用>。因此,在这个命令中:

grep -v help filename > newFileName
    grep 显然调用了grep 程序 -v 是反转输出的标志。默认情况下,grep 打印与给定模式匹配的行。使用此标志,它将打印 匹配模式的行。 help 是要匹配的模式 filename 是输入文件的名称 > 将输出重定向到以下项目 newFileName 将保存输出的新文件。

您可能已经注意到,您不会删除文件中的内容。 grep 将读取它并保存另一个文件,并进行相应的修改。

【讨论】:

@Kevin Duke:唉!这可能意味着您没有安装grep。无论如何,我建议你安装 GNU grep,它肯定可以在 Windows 上运行,而且它是一个非常有用的工具。 @sidyll 它知道 grep 是什么并且做了一堆输出,可能是因为我没有指定输出文件 @Kevin Duke:正如我之前在回答中所说,输出可以重定向。标准行为是在屏幕上打印。要重定向,您可以使用管道(在本例中为 >),最终命令为 grep -v help filename > outputFileName grep > 一周中的任何一天 sed 查找字符序列【参考方案6】:

您可以使用 sed 执行此操作:sed '/help/ d' < inputFile > outputFile

【讨论】:

@CengizFrostclaw:在 Linux/Mac/Whatever 上的命令行。如果您使用的是 Windows,则必须安装 CygWin 之类的软件并使用它。 感谢@TikhonJelvis!最后一个问题,我们可以使用 sed 'help/' 删除所有 starting(不包含)行吗? @CengizFrostclaw:我认为sed '/^help/ d' 应该可以。 ^ 代表行的开头。 @jeff PowerShell 有 sedgrep cygwin 可能无法在带有 utf-16 文件的 Windows 上运行。 Cygwin 实用程序默认使用 UFT-8。他们中很少有人支持 UTF-16。使用 babun babun.github.io。它充当 cygwin 的包装器,但提供了很多开箱即用的东西。

以上是关于正则表达式:删除包含“帮助”等的行的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 删除所有匹配正则表达式的行

从 BigTable 中删除与 BigTable 中的正则表达式匹配的行

Linux正则表达式教程:Grep Regex示例

删除所有满足正则表达式条件的行

Notepad ++中的正则表达式删除空行

使用正则表达式删除任何空白行