在使用grep时获取行号

我使用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'

还有一个问题是,我们如何得到不等于模式的结果。就像所有的文件,但不是有特定字符串的那些?

467710 次浏览
grep -n SEARCHTERM file1 file2 ...

如果你只想要行号,这样做:

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

例子:

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

行号用grep -n打印:

grep -n pattern file.txt

为了只得到行号(没有匹配的行),可以使用cut:

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

包含模式的行grep -v打印:

grep -v pattern file.txt
grep -A20 -B20 pattern file.txt

搜索图案,显示图案前后20行

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

这就给出了有行号的行。

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

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

结果应该是这样的:

linenumber: other data "word to search for" other data

当使用vim时,您可以放置

function grepn() {
grep -n $@ /dev/null | awk -F $':' '{t = $1; $1 = $2; $2 = t; print; }' OFS=$':' | sed 's/^/vim +/' | sed '/:/s// /' | sed '/:/s// : /'
}

在。bashrc中,然后

file1 file2…

结果

vim +123 file1 : xxxxxxSEARCHTERMxxxxxxxxxx
vim +234 file2 : xxxxxxSEARCHTERMxxxxxxxxxx
现在,您可以通过简单地复制在相应的行上打开vim(例如第123行) vim +123 file1