我最近阅读了 Scott Nesbitt 的文章“在 Linux 命令行使用 less 查看文本文件”,并受到启发,分享我使用 less
的其他技巧和窍门。
LESS 环境变量
如果您定义了环境变量 LESS
(例如,在您的 .bashrc
中),less
会将其视为选项列表,就像在命令行中传递一样。
我使用这个
LESS='-C -M -I -j 10 -# 4'
这些意味着
-C
– 通过不从底部滚动来加快全屏重绘速度。-M
– 从最后一行(状态行)显示更多信息。您可以使用-PM
自定义显示的信息,但我通常不费心。-I
– 在搜索中忽略字母大小写(大写/小写)。-j 10
– 在终端的第 10 行显示搜索结果,而不是第一行。这样,每次您按n
(或N
)跳转到下一个(或上一个)匹配项时,您都有 10 行上下文。-# 4
– 按向右或向左箭头键时,向右或向左跳四个字符。默认值是跳半个屏幕,我通常觉得太多了。一般来说,less
似乎(至少部分地)针对最初开发的慢速调制解调器和低带宽互联网连接环境进行了优化,当时跳半个屏幕是有意义的。
PAGER 环境变量
许多程序使用 PAGER
环境变量(如果已设置)中设置的命令来显示信息。因此,您可以在 .bashrc
中设置 PAGER=less
,并让您的程序运行 less
。查看 man page environ(7) (man 7 environ
) 以了解其他此类变量。
-S
命令行选项 -S
告诉 less
裁剪长行而不是换行。除非(并且直到)我开始查看文件,否则我很少发现需要这样做。幸运的是,您可以在 less
中键入所有命令行选项,就像它们是键盘命令一样。因此,如果我想在已经在一个文件中时裁剪长行,我可以简单地键入 -S
。
这是一个我经常使用的例子
su - postgres
export PAGER=less # Because I didn't bother editing postgres' .bashrc on all the machines I use it on
psql
有时,当我稍后查看具有非常宽输出的 SELECT
命令的输出时,我键入 -S
以便它能被很好地格式化。如果当我按向右箭头查看更多内容时跳转得太远(因为我没有设置 -#
),我可以键入 -#8
,然后每次按向右箭头都会向右移动八个字符。
有时在键入 -S
太多次后,我退出 psql 并再次运行它,输入
export LESS=-S
F
命令 F
使 less
像 tail -f
一样工作——等待更多数据添加到文件后再显示它。它比 tail -f
的一个优势是高亮显示搜索匹配项仍然有效。因此,您可以输入 less /var/log/logfile
,搜索一些内容——这将高亮显示它的所有出现(除非您使用了 -g
)——然后按 F
。当更多数据写入日志时,less
将显示它并高亮显示新的匹配项。
在您按 F
后,您可以按 Ctrl+C
停止它查找新数据(这不会杀死它);回到文件中查看旧内容,搜索其他内容等等;然后再次按 F
查看更多新数据。
搜索
搜索使用系统的 regexp 库,这通常意味着您可以使用扩展正则表达式。特别是,搜索 one|two|three
将查找并高亮显示 one、two 或 three 的所有出现。
我经常使用的另一种模式,特别是对于宽日志行(例如,跨越多行终端行的日志行),是 .*something.*
,它会高亮显示整行。这种模式使查看行的开始和结束位置变得更加容易。我也结合使用这些,例如:.*one thing.*|.*another thing.*
,或 key: .*|.*marker.*
以查看 key
的内容(例如,在包含一些字典/哈希转储的日志文件中)并高亮显示相关的标记行(以便我有一个上下文),甚至,如果我知道值被引号包围
key: '[^']*'|.*marker.*
less
维护您的搜索项的历史记录,并将其保存到磁盘以供将来调用。当您按 /
(或 ?
)时,您可以使用向上或向下箭头浏览此历史记录(以及进行基本的行编辑)。
在撰写本文时,我偶然发现了一个似乎非常有用的功能,即在浏览 less
手册页时:使用 &!pattern
跳过不感兴趣的行。例如,在 /var/log/messages
中查找某些内容时,我过去会迭代以下命令列表
cat /var/log/messages | egrep -v 'systemd: Started Session' | less
cat /var/log/messages | egrep -v 'systemd: Started Session|systemd: Starting Session' | less
cat /var/log/messages | egrep -v 'systemd: Started Session|systemd: Starting Session|User Slice' | less
cat /var/log/messages | egrep -v 'systemd: Started Session|systemd: Starting Session|User Slice|dbus' | less
cat /var/log/messages | egrep -v 'systemd: Started Session|systemd: Starting Session|User Slice|dbus|PackageKit Daemon' | less
但现在我知道如何在 less
中做同样的事情。例如,我可以键入 &!systemd: Started Session
,然后决定我想去掉 systemd: Starting Session
,所以我通过键入 &!
添加它,并使用向上箭头从历史记录中获取之前的搜索。然后我键入 |systemd: Starting Session
并按 Enter
,继续以相同的方式添加更多项目,直到我过滤掉足够多的内容以查看更有趣的内容。
=
命令 =
显示有关文件和位置的更多信息,甚至比 -M
更多。如果文件非常长,并且计算 =
花费的时间太长,您可以按 Ctrl+C
,它将停止尝试。
如果您查看的内容来自管道而不是文件,=
(和 -M
)将不会显示它不知道的内容,包括文件中的行数和字节数。要查看该数据,如果您知道 command
将很快完成,您可以按 G
跳转到末尾,然后 less
将开始显示该信息。
如果您按 G
并且写入管道的命令花费的时间比预期的长,您可以按 Ctrl+C
,命令将被终止。即使您没有按 G
,按 Ctrl+C
也会终止它,因此如果您不打算终止它,请小心不要意外按 Ctrl+C
。因此,如果命令执行某些操作(即,它不仅仅是显示信息),通常更安全的方法是将它的输出写入文件,并在单独的终端中查看文件,而不是使用管道。
为什么你需要 less
less
是一个非常强大的程序,与该领域较新的竞争者(如 most
和 moar
)相反,您很可能在几乎所有您使用的系统上找到它,就像 vi
一样。因此,即使您使用 GUI 查看器或编辑器,也值得花一些时间浏览 less
手册页,至少了解一下有哪些可用功能。这样,当您需要执行某些可能被现有功能覆盖的操作时,您就会知道搜索手册页或互联网以查找您需要的内容。
有关更多信息,请访问 less 主页。该网站有一个很好的 FAQ,其中包含更多技巧和窍门。
8 条评论