I\'m writing the script that searches for lines that match some pattern. I must use sed for this script. This works fine for searching and printing matched lines:
Here's the simplest way:
awk '{print ln++ ": " $0 }'
For sed, use following to get line number
sed -n /PATTERN/=
Using Perl:
perl -ne 'print "$.: $_" if /regex/' input.file
$.
contain line number. If input file contains:
record foo
bar baz
record qux
This one-liner: perl -ne 'print "$.: $_" if /record/' input.file
will print:
1: record foo
3: record qux
Or if you just want total number of lines matched a pattern use:
perl -lne '$count++ if /regex/; END { print int $count }' input.file
You can use grep
:
grep -n pattern file
If you use =
in sed
the line number will be printed on a separate line and is not available in the pattern space for manipulation. However, you can pipe the output into another instance of sed to merge the line number and the line it applies to.
sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
Switch to awk.
BEGIN {
ln=0
}
$0 ~ m {
ln+=1
print ln " " $0
next
}
{
print $0
}
...
awk -f script.awk -v m='<regex>' < input.txt
=
is used to print the line number.
sed -n /PATTERN/{=;p;}