使用grep时获取行号


360

我正在使用grep递归来搜索文件中的字符串,并且所有匹配的文件和包含该字符串的行都在终端上打印。但是也有可能获得那些行的行号吗?

例如:目前我得到的是/var/www/file.php: $options = "this.target",但是我想要获得的是/var/www/file.php: 1142 $options = "this.target";1142那么包含该字符串的行号在哪里。

我用来递归grep的语法是 sudo grep -r 'pattern' '/var/www/file.php'

另一个问题是,如何获得不等于模式的结果。像所有文件一样,但不像具有特定字符串的文件一样?


-v标志将显示不匹配的行(grep -v myText MyFile.txt)
bcarroll 2014年

Answers:


546
grep -n SEARCHTERM file1 file2 ...

我还有一个快速的问题,我们如何获得不等于模式的结果。像所有文件一样,但不像具有特定字符串的文件一样?
sai 2010年

5
那将是命令行开关-v。如果您运行'grep --help',它将显示所有选项
Miro A. 2010年

56
-r如果指定多个文件,则不需要。仅-r在指定目录时才需要。
Sparhawk

@JeanPaul-我看到-nr和-n -r的结果相同。您使用的是什么版本的grep?$ grep -n -r名称* | wc -l 1984 $ grep -nr名称* | wc -l 1984 $ grep -V grep(BSD grep)2.5.1-FreeBSD
Miro A.

代码仅作答,无解释。:S
Florian Castelain

148

行号印有grep -n

grep -n pattern file.txt

要仅获取行号(没有匹配的行),可以使用cut

grep -n pattern file.txt | cut -d : -f 1

线包含图案都印有grep -v

grep -v pattern file.txt

3
以及最后一个匹配的行号:(grep -n pattern file.txt | cut -d : -f 1 | tail -1您可以将其保存到变量中,并用它来例如从文件中提取尾文件)
Nux

要删除每个字符串开头的数字/冒号,您可以使用类似以下内容的方法:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

如果只希望行号,请执行以下操作:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

例:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'也可以使用,并且您不需要-rgrep文件上使用时(只能递归搜索目录)
Stuart Cardall


0

grep -nr“搜索字符串”目录

这为您提供了具有行号的行。


0

为了显示带有行号的结果,您可以尝试这样做

grep -nr "word to search for" /path/to/file/file 

结果应该是这样的:

linenumber: other data "word to search for" other data
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.