假设您想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 -f
d:, taking the last one
tail -n 1`...
它可以进行优化(针对非常大的文件)以二进制数据的形式搜索字节,然后指向less
该字节......
...或者可以用sed
更紧凑的方式来提取行号(sed -n '/pattern/=' myfile
)...