`less`:多个命令,包括搜索

`less`:多个命令,包括搜索

假设您想less自动滚动到末尾。很简单,正如手册所述,只需这样做即可less +G

想象一下,你想less从头开始,但吸收了它的全部输入。很简单,这样做less +Gg(到最后再回到开头),它支持多个命令链。你不相信吗?链式Gg序列足够多,你最终会看到less来回走动。

假设您想要less前进到==序列的第六个出现位置。不能使用less +/==nnnnn!它会搜索==nnnnn,而不是搜索==然后搜索下一个五次。现在该怎么做?

答案1

想象一下,实际上你可以指定多个单独的命令,如下所示:

less +/== +nnnnn


 

如果这不起作用,您可以在参数中嵌入文字换行符:

less $'+/==\nnnnnn'
less "+/==
nnnnn"

答案2

此方法用于awk查找字符串的行号并将其用作参数less

less +$(awk '/==/{++n; if (n==6) { print NR; exit}}' file) file

这是受到 Stack Overflow 帖子的启发 shell 脚本查找字符串的第 n 次出现并打印行号,其中有更多查找行号的方法。

为了方便使用,可以将此命令嵌入到 bash 函数中,并以文件、字符串和出现次数作为参数。

答案3

简单来说

为此我做了一个功能

Myless(){ less +g$(grep -n -m$2 "$1" "$3"  | cut -f1 -d: | tail -n 1) "$3"; }

然后我打电话给

Myless == 6 myfile

要求grep找到模式,打印行号,-n在第m次出现后停止-m$2,剪切数字cut -fd:, taking the last onetail -n 1`...

它可以进行优化(针对非常大的文件)以二进制数据的形式搜索字节,然后指向less该字节......

...或者可以用sed更紧凑的方式来提取行号(sed -n '/pattern/=' myfile)...

相关内容