How to Print the First Match and Stop With Grep

Estimated read time 2 min read


Bash Shell

grep is a search utility in Linux used for matching content. By default, it will print out any line that matches, which might include a lot of output. If you only care about the first match, you can limit the output to just the first line.

Limiting Output with grep -m

The grep command has an -m or --max-count parameter, which can solve this problem, but it might not work like you’d expect.

This parameter will make grep stop matching after finding N matching lines, which works great as it will limit the output to one line, always containing the first match. We can verify this with the -n flag to print the line numbers.

grep -m 1 "foo" file

However, this has some downsides you should be aware of. It doesn’t stop after N matches, it stops after N lines. This will cause grep to match multiple times on each line, which can be a problem when used with the -o flag, which prints each match on a new line.

Also, it’s only N lines per file, so when used against multiple files it will print out the first matching line for each file.

Using head To Limit grep Output

The alternative is to pipe the output to a different command, head, which will simply cut off the input after N lines. It’s still a little useful to use -m 1 with grep though, as it will stop processing large files if a match is found early.

grep "foo" file_one.txt | head -1

This works with the -o flag to print only the first match, even if there are multiple matches in a file:

However, be careful when using this with multiple files. Using head will print the first matched line in any file. This can be a problem as grep prints output in the order it processes the files, and you may not know the order the files will be processed in unless you sort them manually before passing them to grep.

Similarly, you can also use tail to print the last matching line.





Source link

You May Also Like

More From Author