如何打印字符串出现在文件中的行号?

时间:2015-06-05 05:05:01

标签: shell awk

我有一个特定的单词,我想找出我的文件中出现的单词行号。

这是在c shell脚本中发生的。

我一直在尝试使用awk来查找行号,但到目前为止我还没有能够。我也希望将该行号分配给变量。

4 个答案:

答案 0 :(得分:16)

使用grep

要在文件中查找word并打印行号,请使用-n选项grep

grep -n 'word' file

这会打印行号和它匹配的行。

使用awk

这将打印文件中出现单词word的行数:

awk '/word/{print NR}' file

这将打印行号和word出现的行:

awk '/word/{print NR, $0}' file

您可以将word替换为您喜欢的任何正则表达式。

工作原理:

  • /word/

    这会选择包含word

  • 的行
  • {print NR}

    对于选定的行,将打印行号(NR表示记录号)。您可以更改此信息以打印您感兴趣的任何信息。因此,{print NR, $0}将打印行号,后跟行本身$0

将行号分配给变量

使用命令替换:

n=$(awk '/word/{print NR}' file)

使用shell变量作为模式

假设我们要查找的正则表达式是shell变量url

awk -v x="$url" '$0~x {print NR}' file

n=$(awk -v x="$url" '$0~x {print NR}' file)

答案 1 :(得分:1)

<强>桑达

您可以使用sed命令

 sed -n '/pattern/=' file

<强>解释

-n抑制正常输出,因此它不会打印实际行。它首先匹配/pattern/,然后=运算符表示打印行号。请注意,这将打印包含该模式的所有行。

答案 2 :(得分:0)

使用NR变量

给定一个包含以下内容的文件:

foo
bar
baz

使用内置NR variable查找行号。例如:

$ awk '/bar/ { print NR }' /tmp/foo
2

答案 3 :(得分:0)

找到第一列与RRBS匹配的行号

awk 'i++ {if($1~/RRBS/) print i}' ../../bak/bak.db