gpt4 book ai didi

regex - 过滤列表中不包含的行

转载 作者:太空狗 更新时间:2023-10-29 11:27:20 24 4
gpt4 key购买 nike

当我过滤不包含指定字符串的行时,我使用grep -v "specifiedstring"文件名但是如何过滤列表中不包含很多字符串的行。非常感谢!

最佳答案

您可以多个字符串:

grep -v "string1\|string2\|string3" filename

这将排除包含 string1string2string3 的行。

在基本正则表达式(上述版本)中,正则表达式元字符失去了它们的特殊含义,需要进行转义。

使用扩展的正则表达式,你不需要转义|:

grep -Ev "string1|string2|string3" filename

如果列表包含在一个文件中,使用-f选项:

grep -v -f list_to_exclude filename

如评论中所述,如果模式是一组字符串,您可以提供 -F 选项以加速 grep:

grep -F -v -f list_to_exclude filename

来自手册:

   -F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)

下面的例子应该进一步解释它。给定一个输入文件,比如 input.txt:

This is line.
This is line2.
This is line3.
This is line4.
This is line*.

现在使用命令:

grep -v 'line*' input.txt

不会产生任何结果,因为 pattern line* 被解释为正则表达式,并且会匹配给定输入文件和 -v< 中的所有行 反转匹配。如果 line* 是一个固定字符串而不是一个正则表达式,那么提供 -F 选项,即说:

grep -F -v 'line*' input.txt

会产生:

This is line.
This is line2.
This is line3.
This is line4.

此外,由于 grep 现在不是在寻找模式,而是在寻找固定字符串,因此它比不使用 快得多- F 选项。

关于regex - 过滤列表中不包含的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com