如何在文件foo
中打印字符串abc.text
的第一个出现的行号?我希望第一次出现的行好像abc.text
从它的第10行开始。
答案 0 :(得分:2)
你可以尝试:
awk 'NR>=10 && $0~/foo/ {print NR; exit}' abc.text
说明:
NR
是行号,只有号码为>=10
的行才会被视为print NR-9
$0~/foo/
是awk
exit
将在第一次出现时停止处理答案 1 :(得分:2)
一种方法是以这种方式使用GNU:
sed -n '10,$ {/foo/{=; q}}' abc.text
那是:
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:'