使用sed匹配模式的编号行

时间:2012-05-14 03:36:49

标签: shell unix sed

我正在编写搜索与某些模式匹配的行的脚本。我必须使用sed这个脚本。 这适用于搜索和打印匹配的行:

sed -n /PATTERN/p

但是,我还想在线本身前面打印匹配的行号。 我怎么能用sed做到这一点?

6 个答案:

答案 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 }'