如何从grep获取行号?


18

以下grep

grep -r -e -n coll *

将显示

fullpath/filename:  <tag-name>coll</tag-name>

我想知道哪一行包含以下文本,我尝试添加-n,但是没有用。我尝试添加 | grep -n *,但这样做有些奇怪。

我想看到的(我不在乎格式)是

fullpath/filename:10:  <tag-name>coll</tag-name>

1
使用该-n选项时,我看到行号。您可以发布得到的结果吗?
克里斯·哈珀

Answers:



15

不需要-r&-e!

获取图案的行号!

grep -n "pattern" file.txt

如果只想获取行号作为输出,则向其添加另一个grep命令!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'

1
仅获取行号,使用起来就更容易了cut,例如cut -f1 -d:
wjandrea

1

要在特定文件中grep模式,并获得匹配的行:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

cut按照@wjandrea的建议使用:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

哪里

  • <Pattern>是带引号的glob模式(正则-E表达式的使用选项);
  • <File> 是您感兴趣的文件;
  • 第一个管道awk ...过滤grep输出中的行号(:每行之前);
  • 第二个管道确保行号仅出现一次。

仅获取行号,cut比使用Awk 更容易使用,例如cut -f1 -d:
wjandrea

@wjandrea以哪种方式更容易?
Sheljohn

我的意思是语法更简单
wjandrea

@wjandrea听起来很客观。
Sheljohn

@wjandrea对不起,我进行了编辑,以包括您的建议:)
Sheljohn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.