【问题标题】:Find the line number where a specific word appears with "grep" [closed]使用“grep”查找特定单词出现的行号[关闭]
【发布时间】:2023-03-27 19:11:01
【问题描述】:

grep 是否能够提供出现指定单词的行号?

另外,是否可以使用grep 从某行向下搜索单词?

【问题讨论】:

  • 我相信这更适合SuperUser
  • @dunsmoreb 我不同意。 grep 既是程序员的工具,也是高级用户的工具。
  • 我一直使用grep。但这确实不是编程相关的问题。
  • 我发现这个问题在编写使用 grep 的 bash 脚本时很有帮助

标签: unix sed grep


【解决方案1】:

使用grep -n 获取匹配的行号。

我认为没有办法让 grep 从某个行号开始。为此,请使用 sed。例如,要从第 10 行开始并打印匹配行的行号和行,请使用:

sed -n '10,$ { /regex/ { =; p; } }' file

要仅获取行号,您可以使用

grep -n 'regex' | sed 's/^\([0-9]\+\):.*$/\1/'

或者你可以简单地使用 sed:

sed -n '/regex/=' file

结合这两个 sed 命令,你会得到:

sed -n '10,$ { /regex/= }' file

【讨论】:

  • 好的,所以 grep -n 将返回包含单词和行号的行。无论如何只能获取行号吗?
  • @OneTwoThree 这对你有用吗?
  • 小幅更正,上一个示例中缺少分号:sed -n '10,$ { /regex/=;}' file 但非常感谢,发现这很有用。
  • 这是否只返回第一个匹配项?如中,如果有多个单词匹配正则表达式,那么?
  • 要仅获取grep -n 行号,使用cut 更容易:grep -n text file | cut -d":" -f1
【解决方案2】:

您可以调用tail +[line number] [file] 并将其通过管道传送到显示行号的grep -n

tail +[line number] [file] | grep -n /regex/

此方法的唯一问题是grep -n 报告的行号将[line number] - 1 小于[file] 中的实际行号。

【讨论】:

    【解决方案3】:

    或者你可以使用

       grep -n . file1 |tail -LineNumberToStartWith|grep regEx
    

    这将负责对文件中的行进行编号

       grep -n . file1 
    

    这将打印 last-LineNumberToStartWith

       tail -LineNumberToStartWith
    

    最后它会 grep 你想要的行(包括原始文件中的行号)

    grep regEX
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多