正则表达式:删除包含“帮助”等的行
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 有 sed
和 grep
cygwin 可能无法在带有 utf-16 文件的 Windows 上运行。 Cygwin 实用程序默认使用 UFT-8。他们中很少有人支持 UTF-16。使用 babun babun.github.io。它充当 cygwin 的包装器,但提供了很多开箱即用的东西。以上是关于正则表达式:删除包含“帮助”等的行的主要内容,如果未能解决你的问题,请参考以下文章