Match string and print a line number only using Linux shell

Here is a simple example on how to search a file and instead of printing a matching string to STOUT we only print a line number for a matching string. For an example consider a following file:

$ nl test.txt 
     1	linux
     2	bash
     3	shell
     4	power
     5	linux
     6	shell
     7	command
     8  GNU

First use the -n option to print line numbers for a matching string shell:

$ grep -n shell test.txt 

As a last step pipe the STDOUT to a cut command:

$ grep -n shell test.txt | cut -d : -f1

If you need the output on a single line add one more pipe to tr command to remove all new line characters and replace them with single space:

grep -n shell test.txt | cut -d : -f1 | tr "\n" " "
3 6

Comments and Discussions
Linux Forum