shell 使用grep时获取行号

v64noz0r  于 2022-11-16  发布在  Shell
关注(0)|答案(7)|浏览(155)

我 正在 使用 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'
还有 一 个 问题 是 , 我们 如何 得到 不 等于 模式 的 结果 。 像 所有 的 文件 , 但 不是 那些 有 特定 字符 串 的 文件 ?

jum4pzuy

jum4pzuy1#

grep -n SEARCHTERM file1 file2 ...
yks3o0rb

yks3o0rb2#

行号打印为grep -n

grep -n pattern file.txt

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

grep -n pattern file.txt | cut -d : -f 1
  • 不 * 包含图案的行用grep -v打印:
grep -v pattern file.txt
t9aqgxwy

t9aqgxwy3#

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

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

示例:

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

ktca8awb4#

grep -A20 -B20 pattern file.txt

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

py49o6xq

py49o6xq5#

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

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

tez616oj

tez616oj6#

为了用行号显示结果,您可以尝试

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

结果应该是这样的:

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

zwghvu4y7#

使用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搜索项文件1文件2 ...
导致

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

现在,只需将vim +123 file1复制到shell中,就可以在相应的行(例如第123行)上打开vim。

相关问题