使用grep只报告行号

我有一个文件可能包含不良格式(在这种情况下,模式\\backslash的发生)。 我想用grep只返回发生这种情况的行号(例如,匹配在这里,去#行x并修复它)。

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

我可以使用另一个正则expression式来提取行号,但我想确保grep不能自行完成。 grep -no最接近,我想,但仍显示匹配。

尝试这个:

 grep -n "text to find" file.ext |cut -f1 -d: 

如果你打算使用AWK:

 awk '/textstring/ {print FNR}' textfile 

在这种情况下,FNR是行号。 AWK是一个非常好的工具,当你在查看grep |剪切,或任何时候你想要grep输出和操纵它。

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

 sed -n '/pattern/=' filename 

Bash版本

  lineno=$(grep -n "pattern" filename) lineno=${lineno%%:*} 

你会想要冒号后的第二个字段,而不是第一个字段。

grep -n "text to find" file.txt | cut -f2 -d:

要计算匹配模式的行数:

 grep -n "Pattern" in_file.ext | wc -l 

提取匹配的模式

 sed -n '/pattern/p' file.est 

显示模式匹配的行号

 grep -n "pattern" file.ext | cut -f1 -d: 

我build议使用sedawk来获取行号的答案,而不是使用grep来获取整个匹配行,然后使用cut或其他工具将其从输出中删除。 为了完整,您也可以使用Perl:

 perl -nE '/pattern/ && say $.' filename 

或Ruby:

 ruby -ne 'puts $. if /pattern/' filename