Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从文件中的特定行号开始打印图案第一次出现的行号_Bash - Fatal编程技术网

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中的标准模式匹配
  • 退出将在第一次出现时停止处理

一种方法是以这种方式使用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

一种方法是以这种方式使用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。我没有想到这一点。我想这取决于你如何理解这个问题。