I want to search for multiple strings in a log file. Only those entries should be highligted where all the search strings are there in same line. Can i use less command for this or any other better option. My log file size is typically few GBs.
Asked
Active
Viewed 2.3k times
2 Answers
22
When you want to search for string1
or string2
, use /string1|string2
.
You said you wanted lines where you find both:
/string1.*string2
When you do not know the order in the line and want to see the complete line, you will need
/.*string1.*string2.*|.*string2.*string1.*
Or shorter
/.*(string1.*string2|string2.*string1).*
Combining more words without a fixed order will become a mess, and filtering first with awk
is nice.

Walter A
- 19,067
- 2
- 23
- 43
-
Thanks! It worked for me. I personally prefer less over awk because of "if file is open i can quickly change the search string, search forward/backward from the current location." Ability to search for multiple strings with less is a bonus. – Satish Jan 29 '17 at 06:58
-
You prefer it because this answer just tackles *two* search patterns. This get's super complicated when you increase the number of patterns or the patterns are more complex. *three* patterns are almost impossible to type. – hek2mgl Jan 29 '17 at 09:03
-
@hek2mgl agree, in my case order of search strings is known and i have just 2 or 3 search strings max, so its preferred. Otherwise like you suggested awk with less is the way to go. – Satish Jan 29 '17 at 15:29
4
Use awk
to filter the file and less
to view the filtered result:
awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
If the file is big you may want to use stdbuf
to see results earlier in less
:
stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less

hek2mgl
- 152,036
- 28
- 249
- 266