Bash 从文件中的特定行号开始打印图案第一次出现的行号
如何打印文件Bash 从文件中的特定行号开始打印图案第一次出现的行号,bash,Bash,如何打印文件abc.text中字符串foo第一次出现的行号?我希望第一次出现的那一行好像是从第十行开始的 awk 'NR>=10 && $0~/foo/ {print NR; exit}' abc.text 说明: NR是行号,仅考虑编号>=10的行号 如果希望输出行号忽略前9行,print NR-9 $0~/foo/是awk中的标准模式匹配 退出将在第一次出现时停止处理 您可以尝试: awk 'NR>=10 && $0~/foo/ {print
abc.text
中字符串foo
第一次出现的行号?我希望第一次出现的那一行好像是从第十行开始的
awk 'NR>=10 && $0~/foo/ {print NR; exit}' abc.text
说明:
是行号,仅考虑编号NR
>=10的行号
- 如果希望输出行号忽略前9行,
print NR-9
是$0~/foo/
awk中的标准模式匹配
退出将在第一次出现时停止处理
awk 'NR>=10 && $0~/foo/ {print NR; exit}' abc.text
说明:
是行号,仅考虑编号NR
>=10的行号
- 如果希望输出行号忽略前9行,
print NR-9
是$0~/foo/
awk中的标准模式匹配
退出将在第一次出现时停止处理
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
一种方法是以这种方式使用GNU sed:
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
对于某些用户来说,这可能更具可读性:
tail-n+10 abc.txt | grep-n foo | head-1 | cut-f1'-d:'
这可能对某些用户更具可读性:
tail-n+10abc.txt | grep-n foo | head-1 | cut-f1'-d:“
seq
不可移植,不推荐seq
不可移植,不推荐您在答案中添加9。我没有想到这一点。我想这取决于你是如何理解这个问题的。你必须在答案上加上9。我没有想到这一点。我想这取决于你如何理解这个问题。