我正在编写搜索与某些模式匹配的行的脚本。我必须使用sed这个脚本。 这适用于搜索和打印匹配的行:
sed -n /PATTERN/p
但是,我还想在线本身前面打印匹配的行号。 我怎么能用sed做到这一点?
答案 0 :(得分:16)
您可以使用grep
:
grep -n pattern file
如果在=
中使用sed
,则行号将打印在单独的行中,并且在模式空间中不可用于操作。但是,您可以将输出通过管道传输到另一个sed实例,以合并行号和它应用的行。
sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
答案 1 :(得分:11)
=
用于打印行号。
sed -n /PATTERN/{=;p;}
答案 2 :(得分:9)
对于sed,请使用以下内容获取行号
sed -n /PATTERN/=
答案 3 :(得分:3)
切换到awk。
BEGIN {
ln=0
}
$0 ~ m {
ln+=1
print ln " " $0
next
}
{
print $0
}
...
awk -f script.awk -v m='<regex>' < input.txt
答案 4 :(得分:2)
使用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
答案 5 :(得分:1)
这是最简单的方法:
awk '{print ln++ ": " $0 }'