如何在 unix 中使用 less 命令在日志文件中搜索多个字符串?
How to search for multiple strings in a log file using less command in unix?
我想在日志文件中搜索多个字符串。只有那些所有搜索字符串都在同一行的条目才应该被高亮显示。我可以为此使用 less 命令或任何其他更好的选择吗?我的日志文件大小通常只有几 GB。
使用awk
过滤文件,less
查看过滤结果:
awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
如果文件很大,您可能希望使用 stdbuf
在 less
中查看更早的结果:
stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
如果要搜索 string1
或 string2
,请使用 /string1|string2
。
你说你想要找到两者的行:
/string1.*string2
当您不知道行中的顺序并希望看到完整的行时,您将需要
/.*string1.*string2.*|.*string2.*string1.*
或更短
/.*(string1.*string2|string2.*string1).*
没有固定顺序的单词组合多了会乱成一团,先用awk
过滤就好了。
我想在日志文件中搜索多个字符串。只有那些所有搜索字符串都在同一行的条目才应该被高亮显示。我可以为此使用 less 命令或任何其他更好的选择吗?我的日志文件大小通常只有几 GB。
使用awk
过滤文件,less
查看过滤结果:
awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
如果文件很大,您可能希望使用 stdbuf
在 less
中查看更早的结果:
stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
如果要搜索 string1
或 string2
,请使用 /string1|string2
。
你说你想要找到两者的行:
/string1.*string2
当您不知道行中的顺序并希望看到完整的行时,您将需要
/.*string1.*string2.*|.*string2.*string1.*
或更短
/.*(string1.*string2|string2.*string1).*
没有固定顺序的单词组合多了会乱成一团,先用awk
过滤就好了。