Linux grep排除多个字符串
我试图使用tailLinux 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
-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
实例,又避免了对正则表达式的人为要求(允许在单独的参数中明确指定多个字符串)。想象一下,在脚本中以编程方式为可能包含任何内容的字符串构造正则表达式……实际上,这些都不是正确的答案,因为当不传递任何关键字以排除时,它将排除所有内容,而不是一无所有。