我经常使用less来查看文件,并想记住我刚刚在文件中看到的内容.但是,当我按q键退出时,我的xterm窗口删除了少显示文件的页面,只显示了我的命令提示符.
当我退出时,如何在终端上保持较少的输出?
我正在分析来自我的服务器的日志文件(特别是那里的几行)。但是这些行的长度大约为 1000 到 2000 个字符。
这里是线如何出来用一个例子grep并less用下面的命令。
tail -n 1000 log.log | grep 'SOME_TEXT' | less
Run Code Online (Sandbox Code Playgroud)
输出:
random text SOME_TEXT another 1000 chars
random SOME_TEXT 2000 chars
text text SOME_TEXT 2000 chars
Run Code Online (Sandbox Code Playgroud)
但是我很难将它们分开,因为它们都是屏幕上的文字(对眼睛也不舒服)。我想让我的输出像打击一样:
random text SOME_TEXT another 1000 chars
random SOME_TEXT 2000 chars
text text SOME_TEXT 2000 chars
Run Code Online (Sandbox Code Playgroud)
我已经用sed以下命令修改了我的上述命令:
tail -n 1000 log.log | grep 'SOME_TEXT' | sed 's/\n/\n\n/' | less
Run Code Online (Sandbox Code Playgroud)
它没有用,所以我尝试了tr下一个:
tail -n 1000 log.log | grep 'SOME_TEXT' | tr '\n' '\n\n' …Run Code Online (Sandbox Code Playgroud) 当我这样做时git diff HEAD^!(为了区分提交中的更改HEAD),输出将通过管道传输到LESS. 我需要搜索 diff 的内容/*(C 风格注释的开头)。我一直无法让这个工作。我按下键盘上的正斜杠键开始搜索。我试过了:
//*
//\*
/\/\*
Run Code Online (Sandbox Code Playgroud)
这些都不起作用(首先/是在 中启动搜索模式LESS)。
如果我运行git diff,并且我的更改少于一页,则命令将自动退出.这是不受欢迎的,因为这是在脚本中,我会立即调用git commit.这会导致错过单页更改日志.
我的第一个想法是将差异输入less,但这不会导致差异更改日志显示空屏幕(需要q按下退出).这是我正在使用的命令:git diff --color=always | less.
有没有更好的方法来做到这一点?
对于工作,我偶尔需要监视我创建的服务的输出日志。这些日志是短暂的,并且包含很多我不一定需要的信息。到目前为止,我一直在使用以下方法观察它们:
grep <tag> * | less
Run Code Online (Sandbox Code Playgroud)
其中<tag>是 INFO、DEBUG、WARN 或 ERROR。警告数量大约是错误数量的 10 倍,调试数量大约是警告数量的 10 倍,等等。在大量相关的 DEBUG 消息中很难捕捉到一个 ERROR。例如,我想要一种方法,使所有“警告”消息都出现在终端的左侧,而所有“错误”消息都出现在右侧。
我曾尝试使用 tmux 和 screen,但它似乎不适用于我的开发机器。
我想为Linux编写一个像'less'命令这样的交互式程序.原因我在我的设置中不能少用,因为你可以在较少提示的'!cmd'中执行shell命令,这可能是任何生产盒的主要安全风险.
我的首选语言是C,但是,如果有人可以建议任何其他类似的程序也会很棒,因为我手上有时间.
我知道一个选项是浏览较少的源代码,但看起来这在短时间内不是很直接.
我已经为 Windows 安装了 Git,并且总体上对它提供的 Bash shell 中的功能集感到满意。我在使用别名时遇到了问题,该别名在我尝试过的其他任何地方都可以正常工作。
别名:
alias gl='git log --graph --format='\''%Cred%h%Creset %s %C(yellow)%an | %C(cyan)%ad%Creset %C(green bold)%d%Creset'\''' | less
Run Code Online (Sandbox Code Playgroud)
在 MacOS bash 终端 Cygwin 中,当然在 Linux shell 中,别名会产生很好的结果。
在 GFW 的 Bash shell 中,输出非常混乱:
如果我直接运行命令,没有别名,它可以正常工作。所以我知道并不是 GFW 的 Bash shell 不知道如何解析我写的命令。
我的问题:如何让这个别名在 Git For Windows 下正常工作?
我愿意使用别名的替代方法。如果 linux 函数或真正的 Git 别名会更好地工作,我对这些替代方案感到满意。不过,弄清楚为什么会发生这种情况会很好。
更新/发现 问题似乎根本不在于解释别名。如果我将管道移至“少”,则输出显示正确。因此,看起来 Git Bash Shell 中实现的“less”命令对转义序列的解释(从字面上看,我猜)与其他实现不同。因此,再多的函数调用都无法解决核心问题。
我知道如何使用特定行数来拖尾文本文件,
tail -n50 /this/is/my.log
Run Code Online (Sandbox Code Playgroud)
但是,如何使该行计数成为变量?
假设我有一个大型日志文件,它由某个程序每天附加到,日志文件中的所有行都以这种格式的日期时间开头:
Day Mon YY HH:MM:SS
Run Code Online (Sandbox Code Playgroud)
每天我都想输出日志文件的尾部,但只输出前几天的记录。假设这个输出在午夜之后运行,我不担心尾部会溢出到第二天。
我只是希望能够根据昨天日期的第一次出现来计算出要拖尾的行数...
那可能吗?
我正在使用该less命令浏览一个非常大的文本日志文件(15 GB),并尝试搜索多行模式,但是经过一些调查,该less命令只能搜索单行模式。
有没有一种方法可以使用grep或其他命令来返回多行模式的数字行?
日志的格式是这样的,经过数十万次迭代:
Packet A
op_3b : 001
ctrl_2b : 01
ini_count : 5
Packet F
op_3b : 101
ctrl_2b : 00
ini_count : 4
Packet X
op_3b : 010
ctrl_2b : 11
ini_count : 98
Packet CA
op_3b : 100
ctrl_2b : 01
ini_count : 5
Packet LP
op_3b : 001
ctrl_2b : 00
ini_count : 0
Packet ZZ
op_3b : 111
ctrl_2b : 01
ini_count : 545
Packet QEA
op_3b : …Run Code Online (Sandbox Code Playgroud) 在我的旧系统(Linux Mint 18.3)上,每次我使用 less 命令并退出(q)时,最后查看的 less 页面仍保留在终端(bash)视图中
在我的新系统(最低 19.3)上,当我退出“less”时,一切都会消失,就好像 less 从未打开过(例如,类似于“nano”命令所发生的情况)
有没有办法让 less 的行为像我的旧系统一样?当使用 git log 等工作时,它非常有用