【发布时间】:2013-04-19 05:22:33
【问题描述】:
我正在尝试使用 tail -f 查看日志文件,并希望排除包含以下字符串的所有行:
"Nopaging the limit is"` and `"keyword to remove is"
我可以像这样排除一个字符串:
tail -f admin.log|grep -v "Nopaging the limit is"
但是如何排除包含string1 或string2 的行。
【问题讨论】:
我正在尝试使用 tail -f 查看日志文件,并希望排除包含以下字符串的所有行:
"Nopaging the limit is"` and `"keyword to remove is"
我可以像这样排除一个字符串:
tail -f admin.log|grep -v "Nopaging the limit is"
但是如何排除包含string1 或string2 的行。
【问题讨论】:
把这个放到filename.txt:
abc
def
ghi
jkl
grep 命令使用 -E 选项在字符串中的标记之间使用管道:
grep -Ev 'def|jkl' filename.txt
打印:
abc
ghi
使用 -v 选项的命令,在由括号括起来的标记之间带有管道:
egrep -v '(def|jkl)' filename.txt
打印:
abc
ghi
【讨论】:
grep -v -e def -e jkl 恕我直言更清楚的方法......
grep -Fv -e def -e jkl 更快!
grep -vF $(pgrep myprocess)
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'
-F 通过文字字符串匹配(而不是正则表达式)
-v 反转匹配
-e 允许多种搜索模式(所有文字和反转)
【讨论】:
grep -v 实例和正则表达式的人为要求(让多个字符串在单独的参数中明确指定)的唯一方法。试想一下,在脚本中以编程方式为可能包含任何内容的字符串构建该正则表达式……
另一个选项是创建一个排除列表,当您有很长的排除列表时,这特别有用。
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
【讨论】:
-v 与-f 一起使用(或者后者甚至存在)。
grep -v -f <(gen_exclusions.sh) /var/log/admin.log
egrep -v "Nopaging the limit is|keyword to remove is"
【讨论】:
tail -f admin.log|grep -v -E '(Nopaging the limit is|keyword to remove is)'
【讨论】:
您可以像这样使用常规 grep:
tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"
【讨论】:
grep 可以被链接。例如:
tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"
【讨论】:
如果你想使用正则表达式:
grep -Ev -e "^1" -e '^lt' -e 'John'
【讨论】: