有没有办法只从文本文件中选择那些排除子字符串的行?例如,我有文件:
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
答案 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。