我需要这样的东西:

grep ^"unwanted_word"XXXXXXXX

当前回答

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')的标准输入。

其他回答

-v选项将显示与模式不匹配的所有行。

grep -v ^unwanted_word

我通过使用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的-v (for——invert-match)选项as:

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" file将过滤包含unwanted_word的行,grep XXXXXXXX将只列出模式为XXXXXXXX的行。

编辑:

从您的注释中,看起来您想要列出所有没有unwanted_word的行。在这种情况下,你只需要:

grep -v 'unwanted_word' file

如果您的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
$ 

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')的标准输入。