使用 grep 时获取行号

问题描述 投票:0回答:7

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

我们如何获得不等于模式的结果?与所有文件一样,但不包括具有特定字符串的文件。

linux shell grep line
7个回答
683
投票
grep -n SEARCHTERM file1 file2 ...

185
投票

行号打印有

grep -n
:

grep -n pattern file.txt

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

cut
:

grep -n pattern file.txt | cut -d : -f 1
包含图案的

行打印有grep -v

grep -v pattern file.txt
    

31
投票
如果您只想要行号,请执行以下操作:

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

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

13
投票
grep -A20 -B20 pattern file.txt

搜索模式并显示模式前后 20 行


2
投票

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

这将为您提供带有行号的行。


2
投票
为了显示带有行号的结果,你可以尝试这个

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

结果应该是这样的:

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

0
投票
使用 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中,然后

grepn 搜索词 file1 file2 ...

结果

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

vim +123 file1

到你的外壳。

© www.soinside.com 2019 - 2024. All rights reserved.