【问题标题】:How can I use grep to get the line number without the output? [duplicate]如何在没有输出的情况下使用 grep 获取行号? [复制]
【发布时间】:2012-12-24 07:39:34
【问题描述】:

可能重复:
Use grep to report back only line numbers

我只想查看行号。我不需要查看剩余的输出。

【问题讨论】:

标签: linux shell grep


【解决方案1】:

将您的grep -n 输出管道化,通常看起来像:

11: stuff that matched
43: more stuff that matched

通过 sed 剥离出匹配的部分:

grep -n pattern file | sed -e 's/:.*//g'

11
43

【讨论】:

  • 太好了,谢谢,不过我还有一个问题:我怎样才能得到第一个匹配结果?
  • 你能介绍一下字符串“:.*”,它们代表什么?
  • 它是冒号的替换,后面出现的任何内容都带有空字符串“//”,这里有正则表达式的解释,您也可以在这里玩弄它:regex101.com/r/nS9jM7
  • 好的,但是你不回答我另一个问题:我怎样才能得到第一个匹配结果?
  • 如果你想得到第一行(任何东西),你可以将它通过管道传送到“head -n1”所以“grep -n 模式文件| sed -e 's/:.*//g ' | 头 -n1
【解决方案2】:

grep -n--line-number 选项将为您执行此操作。您可以在 grep 帮助文件中找到这些信息,您可以使用grep --helpgrep --help | less 来更仔细地阅读它。还可以考虑使用手册页:man grep

【讨论】:

  • grep -h 用于抑制输出中的前缀文件名,但我不想要内容,而不是文件名。
  • 对不起,你完全正确。
【解决方案3】:

你也可以使用awk

grep -n word file | awk -F: '{ print $1 }'

正如@Barmar 指出的那样,您可以只使用awk 单线:

awk '/regex/ { print NR }' file

由于您没有awk,您也可以使用cut

grep -n word file | cut -d: -f1

【讨论】:

  • 为了好玩,也只是一个 grep 管道:grep -n alert test.html | egrep -o '^[0-9]+:' | egrep -o '^[0-9]+' #:-)
  • 如果你要使用awk,为什么还要麻烦grep,因为awk可以做正则表达式匹配自己并且它有一个带有行号的变量?
  • @Barmar 做某事的方法总是不止一种。我只是很快就写好了。
  • 不幸的是,我的 linux 没有 awk..
  • @choujayyl 你有什么没有 awk 的 Linux?
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多