Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux grep排除多个字符串_Linux_Ubuntu - Fatal编程技术网

Linux grep排除多个字符串

Linux grep排除多个字符串,linux,ubuntu,Linux,Ubuntu,我试图使用tail-f查看日志文件,并希望排除包含以下字符串的所有行: "Nopaging the limit is"` and `"keyword to remove is" 我可以排除如下一个字符串: tail -f admin.log|grep -v "Nopaging the limit is" 但是如何排除包含string1或string2的行另一个选项是创建排除列表,当您有一长串要排除的内容时,这尤其有用 egrep -v "Nopaging the limit is|keyw

我试图使用tail
-f
查看日志文件,并希望排除包含以下字符串的所有行:

"Nopaging the limit is"`  and `"keyword to remove is"
我可以排除如下一个字符串:

tail -f admin.log|grep -v "Nopaging the limit is"

但是如何排除包含
string1
string2

的行另一个选项是创建排除列表,当您有一长串要排除的内容时,这尤其有用

egrep -v "Nopaging the limit is|keyword to remove is"
vi /root/scripts/exclude_list.txt
现在添加要排除的内容

Nopaging the limit is
keyword to remove is
现在使用grep从文件日志文件中删除行,并查看未排除的信息

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log
使用grep过滤多行的两个示例: 将其放入
filename.txt

abc
def
ghi
jkl
grep命令使用-E选项,并在字符串中的令牌之间使用管道:

grep -Ev 'def|jkl' filename.txt
egrep -v '(def|jkl)' filename.txt
印刷品:

abc
ghi
abc
ghi
命令使用-v选项,标记之间的管道由括号包围:

grep -Ev 'def|jkl' filename.txt
egrep -v '(def|jkl)' filename.txt
印刷品:

abc
ghi
abc
ghi

您可以像这样使用常规grep:

tail -f admin.log|grep -v "Nopaging the limit is"

tail-f admin.log | grep-v“没有限制是\|要删除的关键字是”

grep>可以链接。例如:

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"
-F
通过文本字符串匹配(而不是正则表达式)

-v
反转匹配


-e
允许多种搜索模式(全部为文字和倒排)

这个答案在MacOSX上对我有效。逃离管道是关键。我不知道你可以使用
-v
-f
(或者后者甚至存在)。非常有用!请注意,您不必为排除列表创建临时文件。在bash中,可以使用进程替换。如果排除列表是动态的,你必须在每次使用前生成它,并且只使用一次,那么这就很方便了:
grep-v-f我很惊讶没有人谈论
grep-v-e def-e jkl
方法,它更清晰……甚至更好:
grep-Fv-e def-e jkl
,它更快!使用-F标志,可以使用换行符作为分隔符,而不是管道。这允许更容易地使用命令输出作为过滤器,例如:
grep-vF$(pgrep myprocess)
这里的问题是,您必须按顺序运行N个进程,其中每个进程都会过滤掉一些东西,而不是过滤掉的进程。这是正确的答案:唯一一个既避免了多个
grep-v
实例,又避免了对正则表达式的人为要求(允许在单独的参数中明确指定多个字符串)。想象一下,在脚本中以编程方式为可能包含任何内容的字符串构造正则表达式……实际上,这些都不是正确的答案,因为当不传递任何关键字以排除时,它将排除所有内容,而不是一无所有。