我怎样才能排除一个字与grep?
我需要像这样的东西:
grep ^"unwanted_word"XXXXXXXX
你也可以使用grep的-v
选项来做到这一点:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file
将过滤具有unwanted_word
的行,并且grep XXXXXXXX
将仅列出具有模式XXXXXXXX
。
编辑:
从你的评论看来,你想列出所有没有unwanted_word
。 在这种情况下,所有你需要的是:
grep -v 'unwanted_word' file
我把这个问题理解为“如何匹配一个词但排除另一个词”,对此,一个解决scheme是两个系列的grep:首先grepfind想要的“word1”,第二个grep不包括“word2”:
grep "word1" | grep -v "word2"
在我的情况下,我需要区分grep的“word”选项不会做的“plot”和“#plot”(“#”不是字母数字)。
希望这可以帮助。
如果你的grep
支持-P
选项的Perl正则expression式,你可以做(如果bash;如果tcsh你需要转义!
):
grep -P '(?!.*unwanted_word)keyword' file
演示:
$ cat file foo1 foo2 foo3 foo4 bar baz
现在让我们列出除foo3
之外的所有foo
$ grep -P '(?!.*foo3)foo' file foo1 foo2 foo4 $
正确的解决scheme是使用grep -v "word" file
,与其awk
等效:
awk '!/word/' file
然而,如果你碰巧遇到了一个更复杂的情况,比如说XXX
出现,并且YYY
不出现,那么awk
就会变得很方便,而不是pipe几个grep
:
awk '/XXX/ && !/YYY/' file # ^^^^^ ^^^^^^ # I want it | # I don't want it
你甚至可以说更复杂的东西。 例如:我想要那些包含XXX
或YYY
,但不包含ZZZ
:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
等等
使用grep -v反转匹配:
grep -v "unwanted word" file pattern
-v
选项将显示与模式不匹配的所有行。
grep -v ^unwanted_word
grep提供'-v'或'–invert-match'选项来select不匹配的行。
例如
grep -v 'unwanted_pattern' file_name
这将输出文件file_name中没有“unwanted_pattern”的所有行。
如果要在文件夹内的多个文件中search模式,则可以使用recursionsearch选项,如下所示
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
在这里,grep会尝试从当前目录中的所有文件中列出'wanted_pattern'的所有出现,并将其传递给第二个grep以过滤掉'unwanted_pattern'。 '|' – pipe会告诉shell将左程序(grep -r'wanted_pattern'*)的标准输出连接到正确程序的标准input(grep -v'unwanted_pattern')。
我有一堆文件的目录。 我想find所有不包含string“加速”的文件,所以我成功地使用了下面的命令:
grep -iL speedup *
- 正则expression式的JavaScript只允许字母数字
- 函数只返回string中的字母数字字符?
- 如何在JavaScript Regexp中捕获任意数量的组?
- 如何获得string中所有出现的Ruby正则expression式的匹配数据?
- Ruby的正则expression式有一个不匹配的运算符,比如Perl中的“!〜”吗?
- 什么正则expression式将匹配有效的国际电话号码?
- 我在哪里可以find多种语言的正则expression式的unit testing?
- 在Javascript中使用正则expression式进行recursion匹配
- Reporting Services从expression式中的DateTime中删除时间