从正则表达式中排除字符串

时间:2015-01-10 22:23:06

标签: regex

有没有办法只从文本文件中选择那些排除子字符串的行?例如,我有文件:

I have a /apple
I have a peach
I have a cucumber/strawberry
ABCDE
I have a apple/grape
XYZEF
POLSD

我希望选择以&#39开头的行;我有一个'但不要包含字符串' apple'。基本上我只想选择:

I have a peach
I have a cucumber/strawberry

4 个答案:

答案 0 :(得分:3)

使用否定前瞻。

^I have a (?!.*\bapple\b).+

将匹配所有"我有一个"字符串除了包含整个单词" apple"。这仍将匹配短语

I have a pineapple

因为" apple"。

周围的单词边界

答案 1 :(得分:1)

使用烟斗:

grep '^I have a' file.txt | grep -v apple

答案 2 :(得分:0)

您应该使用正则表达式"以"开头这样的多行标志: " ^我有一个。* " /的

答案 3 :(得分:0)

对于纯正则表达式解决方案,您可以使用以下内容:

^I have a (?!.*apple) - 注意:如果您不想匹配像&之类的内容,您还可以在" apple"周围添加\b字边界,就像Jongware建议的那样#34;菠萝"

然而,更简单的方法(特别是如果问题有点复杂!)将组合搜索第一个模式,搜索除了第二个模式。

根据Danny Daglas的建议grep,你可以grep '^I have a' file.txt | grep -v apple(其中grep -v是"反grep")。

但是,你想在文本编辑器中这样做,这是公平的。确切的方法明显因文本编辑器而异,但是例如对于Vim,请查看this excellent stackoverflow answe r。