我正在编写搜索与某种模式匹配的行的脚本。我必须为这个脚本使用 sed。这适用于搜索和打印匹配的行:
sed -n /PATTERN/p
但是,我还想在行本身前面打印匹配的行号。我怎样才能使用 sed 做到这一点?
您可以使用grep
:
grep -n pattern file
如果在行号中使用=
,sed
将打印在单独的行上并且不可用在模式空间中进行操作。但是,您可以将输出通过管道传输到 sed 的另一个实例中,以合并行号及其适用的行。
sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
=
用于打印行号。
sed -n /PATTERN/{=;p;}
对于 sed,使用以下获取行号
sed -n /PATTERN/=
切换到 awk。
BEGIN {
ln=0
}
$0 ~ m {
ln+=1
print ln " " $0
next
}
{
print $0
}
...
awk -f script.awk -v m='<regex>' < input.txt
使用 Perl:
perl -ne 'print "$.: $_" if /regex/' input.file
$.
包含行号。如果输入文件包含:
record foo
bar baz
record qux
这个单行:perl -ne 'print "$.: $_" if /record/' input.file
将打印:
1: record foo
3: record qux
或者,如果您只希望总行数与模式匹配,请使用:
perl -lne '$count++ if /regex/; END { print int $count }' input.file
这是最简单的方法:
awk '{print ln++ ": " $0 }'