我需要这样的东西:
grep ^"unwanted_word"XXXXXXXX
我需要这样的东西:
grep ^"unwanted_word"XXXXXXXX
当前回答
我有一个目录,里面有很多文件。我想找到所有不包含字符串“加速”的文件,所以我成功地使用了以下命令:
grep -iL speedup *
其他回答
我有一个目录,里面有很多文件。我想找到所有不包含字符串“加速”的文件,所以我成功地使用了以下命令:
grep -iL speedup *
Grep提供了'-v'或'——invert-match'选项来选择不匹配的行。
如。
grep -v 'unwanted_pattern' file_name
这将输出文件file_name中的所有行,该文件没有'unwanted_pattern'。
如果您在一个文件夹内的多个文件中搜索模式,您可以如下所示使用递归搜索选项
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
这里grep将尝试列出当前目录中所有文件中'wanted_pattern'的所有出现情况,并将其传递给第二个grep以过滤掉'unwanted_pattern'。 '|' - pipe将告诉shell将左边程序(grep -r 'wanted_pattern' *)的标准输出连接到右边程序(grep -v 'unwanted_pattern')的标准输入。
我通过使用grep -vw“^/”排除了根(“/”)挂载点。
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}'
/
/root/.m2
/root
/var
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}' | grep -vw "^/"
/root/.m2
/root
/var
我把这个问题理解为“如何匹配一个单词但排除另一个”,对此的一个解决方案是两个grep串联:第一个grep找到想要的“word1”,第二个grep排除“word2”:
grep "word1" | grep -v "word2"
在我的例子中:我需要区分“plot”和“#plot”,grep的“word”选项不会这样做(“#”不是字母数字)。
如果您的grep支持Perl正则表达式与-P选项,您可以这样做(如果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
$