Reputation: 15284
I'm using grep to match string in a file. Here is an example file:
example one,
example two null,
example three,
example four null,
grep -i null myfile.txt
returns
example two null,
example four null,
How can I return matched lines together with their line numbers like this:
example two null, - Line number : 2
example four null, - Line number : 4
Total null count : 2
I know -c returns total matched lines, but I don't how to format it properly to add total null count
in front, and I don't know how to add the line numbers.
What can I do?
Upvotes: 444
Views: 438098
Reputation: 79
Just thought I'd something that might help you in the future. To search multiple string and output line numbers and browse thru the output, type:
egrep -ne 'null|three'
will show:
2:example two null,
3:example three,
4:example four null,
egrep -ne 'null|three' | less
will display output in a less session
HTH Jun
Upvotes: 1
Reputation: 1228
Refer this link for linux command linux http://linuxcommand.org/man_pages/grep1.html
for displaying line no ,line of code and file use this command in your terminal or cmd, GitBash(Powered by terminal)
grep -irn "YourStringToBeSearch"
Upvotes: 3
Reputation: 274838
-n
returns line number.
-i
is for ignore-case. Only to be used if case matching is not necessary
$ grep -in null myfile.txt
2:example two null,
4:example four null,
Combine with awk
to print out the line number after the match:
$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'
example two null, - Line number : 2
example four null, - Line number : 4
Use command substitution to print out the total null count:
$ echo "Total null count :" $(grep -ic null myfile.txt)
Total null count : 2
Upvotes: 691
Reputation: 51693
Or use awk
instead:
awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file
Upvotes: 7
Reputation: 964
or in perl (for completeness...):
perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'
Upvotes: 3
Reputation: 343057
grep
find the lines and output the line numbers, but does not let you "program" other things. If you want to include arbitrary text and do other "programming", you can use awk,
$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null, - Line number: 2
example four null, - Line number: 4
Total null count: 2
Or only using the shell(bash/ksh)
c=0
while read -r line
do
case "$line" in
*null* ) (
((c++))
echo "$line - Line number $c"
;;
esac
done < "file"
echo "total count: $c"
Upvotes: 4
Reputation: 707
use grep -n -i null myfile.txt
to output the line number in front of each match.
I dont think grep has a switch to print the count of total lines matched, but you can just pipe grep's output into wc to accomplish that:
grep -n -i null myfile.txt | wc -l
Upvotes: 8
Reputation: 93805
Use -n
or --line-number
.
Check out man grep
for lots more options.
Upvotes: 67