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

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

如何做到这一点?

【问题讨论】:

    标签: regex notepad++


    【解决方案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
    
    1. grep 显然调用了grep 程序
    2. -v 是反转输出的标志。默认情况下,grep 打印与给定模式匹配的行。使用此标志,它将打印 匹配模式的行。
    3. help 是要匹配的模式
    4. filename 是输入文件的名称
    5. > 将输出重定向到以下项目
    6. 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 的包装器,但提供了很多开箱即用的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多