ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

D
Dominykas Mostauskis
grep -n SEARCHTERM file1 file2 ...

我有另一个快速的问题,我们如何获得不等于模式的结果。像所有文件一样,但不是具有特定字符串的文件?
那将是命令行开关-v。如果您运行“grep --help”,它将显示所有选项
如果您指定多个文件,则不需要 -r。如果您指定目录,则只需要 -r
@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
代码只回答,不解释。 :S
c
carlito

行号用 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 -n pattern file.txt | cut -d : -f 1 | tail -1(您可以将其保存到变量中并使用它来例如从中提取尾文件)
要删除每个字符串开头的数字/冒号,您可以使用以下内容:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
q
quotesBro

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

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

例子:

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

awk -F: '{print $1}' 也有效用于文件时不需要 grep 中的 -r(只能递归搜索目录)
如何分离 awk '{print $1}' FS=":" 结果并将它们保存在变量中以供将来操作?
f
fedorqui
grep -A20 -B20 pattern file.txt

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


这根本不是所要求的。
此外,如果需要,-C20 是一个较短的版本
让我们面对现实吧——这对我们中的许多人来说是一个很好的答案,他们在这里谷歌搜索日志文件:)
@JonathonReinhart 这可能不是 OP 所要求的,但我发现它非常有用,我会鼓励回答此类问题的人们继续添加这种花絮。
g
gorkem

grep -nr "搜索字符串" 目录

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


F
Fouad Djebbar

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

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

结果应该是这样的:

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

P
Porsche9II

使用 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 SEARCHTERM 文件 1 文件 2 ...

结果是

vim +123 file1 : xxxxxxSEARCHTERMxxxxxxxxxx
vim +234 file2 : xxxxxxSEARCHTERMxxxxxxxxxx

现在,您可以通过简单地将 vim +123 file1 复制到您的 shell 来打开对应行(例如第 123 行)上的 vim。