如何从 grep 获取行号?

如何从 grep 获取行号?

以下 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

不需要 -r 和 -e!

获取模式的行号!

grep -n "pattern" file.txt

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

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

答案2

您应该-e在选项列表的末尾添加:grep -rne coll *

答案3

在特定文件中 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 输出中的行号(:每行之前);
  • 第二个管道确保行号只出现一次。

答案4

#这仅显示行号。
#i --> 不区分大小写, n --> 行号

var="APPLE";targetFile="targetFile.txt"
numLin = $(grep -in $var $targetFile | cut -d':'-f1);
回显 $numLine;

相关内容