从文件中的特定行号开始打印模式第一次出现的行号

时间:2016-08-04 18:37:33

标签: bash

如何在文件foo中打印字符串abc.text的第一个出现的行号?我希望第一次出现的行好像abc.text从它的第10行开始。

3 个答案:

答案 0 :(得分:2)

你可以尝试:

awk 'NR>=10 && $0~/foo/ {print NR; exit}' abc.text

说明:

  • NR是行号,只有号码为>=10的行才会被视为
  • 如果您希望输出行号忽略前9行print NR-9
  • $0~/foo/awk
  • 中的标准模式匹配
  • exit将在第一次出现时停止处理

答案 1 :(得分:2)

一种方法是以这种方式使用GNU:

sed -n '10,$ {/foo/{=; q}}' abc.text

那是:

  • 在第10行到最后的范围内
  • - >对于匹配foo
  • 的行
  • - >打印行号,然后停止处理

一些测试证明正确性:

{ for i in {1..9}; do echo $i; done; echo foo; echo bar; echo foo; } | \
sed -n '10,$ {/foo/{=; q}}'
# correctly prints 10

{ for i in {1..9}; do echo $i; done; echo x; echo foo; echo bar; echo foo; } | \
sed -n '10,$ {/foo/{=; q}}'
# correctly prints 11

{ for i in {1..9}; do echo $i; done; } | \
sed -n '10,$ {/foo/{=; q}}'
# correctly prints nothing

答案 2 :(得分:0)

对于某些用户来说,这可能更具可读性:

tail -n +10 abc.txt | grep -n foo | head -1 | cut -f1 '-d:'