CLI tip 7: limiting number of filtered lines
grep
supports -m
option to specify the maximum number of matching lines in the output.
# all input lines containing 'a' $ printf 'goal\nrate\neat\npit\n' | grep 'a' goal rate eat # maximum of 2 matching lines $ printf 'goal\nrate\neat\npit\n' | grep -m2 'a' goal rate $ printf 'goal\nrate\neat\npit\n' | grep -m2 'pi' pit # example with -v option $ printf 'goal\nrate\neat\npit\n' | grep -v 'e' goal pit $ printf 'goal\nrate\neat\npit\n' | grep -v -m1 'e' goal
With multiple file input, the restriction is applied for each file separately.
$ cat table.txt brown bread mat cake 42 blue cake mug shirt -7 yellow banana window shoes 3.14 $ printf 'goal\nrate\neat\npit\n' > ip.txt $ grep -m1 'i' table.txt ip.txt table.txt:blue cake mug shirt -7 ip.txt:pit # use 'cat' if you want to operate on combined input $ cat table.txt ip.txt | grep -m1 'i' blue cake mug shirt -7 $ cat table.txt ip.txt | grep -m1 'go' goal
Video demo:
See my CLI text processing with GNU grep and ripgrep ebook if you are interested in learning about
GNU grep
and ripgrep
commands in more detail.