使用grep仅报告行号

Nei*_*eil 94 grep

我有一个文件可能包含错误的格式(在这种情况下,模式的出现\\backslash).我想用它grep来只返回发生这种情况的行号(如同,匹配在这里,转到第x行并修复它).

但是,似乎没有办法打印行号(grep -n)而不是匹配或行本身.

我可以使用另一个正则表达式来提取行号,但我想确保grep不能单独执行.grep -no我认为,最接近,但仍显示匹配.

lov*_*nux 139

尝试:

grep -n "text to find" file.ext | cut -f1 -d:
Run Code Online (Sandbox Code Playgroud)

  • `grep -n"文本找到"file.ext | cut -f1,2 -d:`显示文件名和行号. (12认同)
  • @MarioAwad,你应该操纵`-f` param.对我来说是`-f2`.(知道这是旧的东西,但我认为它可以帮助一些可怜的灵魂) (3认同)
  • 在我的机器上,这只是打印没有行号的匹配文件(所以如果我在一个文件中有 3 个匹配项,它只打印一次),这仍然非常有用...... (2认同)
  • @jondim 如果有多个文件被搜索,它只显示文件名;当只有一个文件时,您需要添加“-H”以强制它显示文件名。相反,您始终可以使用 `-h` 来告诉它无论您要搜索多少个文件都不要输出文件名。 (2认同)

bri*_*cer 43

如果您愿意使用AWK:

awk '/textstring/ {print FNR}' textfile
Run Code Online (Sandbox Code Playgroud)

在这种情况下,FNR是行号.当您查看grep | cut时,或任何想要获取grep输出并操作它的时候,AWK都是一个很棒的工具.

  • 使用一个过程(这在过去更重要,但仍然如此),并且对于 awk 初学者来说很容易理解! (2认同)

mav*_*ick 29

所有这些答案都需要grep来生成整个匹配行,然后将其传递给另一个程序.如果你的线很长,那么使用sed来输出线号可能更有效:

sed -n '/pattern/=' filename
Run Code Online (Sandbox Code Playgroud)