使用sed对与模式匹配的行进行编号

soat7uwm  于 2022-10-17  发布在  Unix
关注(0)|答案(4)|浏览(220)

我正在编写搜索与某种模式匹配的行的脚本。对于此脚本,我必须使用sed。这样可以很好地搜索和打印匹配的行:

sed -n /PATTERN/p

但是,我还想在该行前面打印匹配的行号。我如何使用sed来做到这一点呢?

kuuvgm7e

kuuvgm7e1#

您可以使用grep

grep -n pattern file

如果在sed中使用=,行号将打印在单独的行上,并且在模式空间中不可用于操作。但是,您可以将输出通过管道传递到sed的另一个示例,以合并行号和它所应用的行。
GNU sed

sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'

MacOS sed

sed -n -e '/pattern/{=' -e 'p' -e '}' file | sed -e '{N' -e 's/\n/ /' -e '}'
azpvetkf

azpvetkf2#

=用于打印行号。

sed -n /PATTERN/{=;p;}
dbf7pr2w

dbf7pr2w3#

对于sed,使用以下命令获取行号

sed -n /PATTERN/=
sauutmhj

sauutmhj4#

切换到awk。

BEGIN {
  ln=0
}

$0 ~ m {
  ln+=1
  print ln " " $0
  next
}

{
  print $0
}

..。

awk -f script.awk -v m='<regex>' < input.txt

相关问题