用于搜索并突出显示终端缓冲区中文本的 Bash 脚本命令

用于搜索并突出显示终端缓冲区中文本的 Bash 脚本命令

我需要模拟选择(突出显示)终端缓冲区中的文本。它已经过去很久了,所以所有 grep/awk/sed/重定向的东西都不相关。另外,我不希望在标准输出格式化期间突出显示它。我需要它以未突出显示的方式进入标准输出,然后突出显示它。模拟选择。

这是场景...

Bash 脚本调用“ls -1”并将以下内容输出到 stdout,然后输出到终端缓冲区?

$ ls -1
a.txt
b.txt
c.txt

现在我需要一个可以放入 Bash 脚本中的命令来查找并突出显示“b.txt”。

喜欢:

$ termsearch b.txt
a.txt
[b.txt]
c.txt

其中“termsearch”是一个我认为我需要的组成命令,它将 b.txt 转换为白色背景的黑色文本(突出显示),其余文本为黑色背景白色。我认为问题在于您无法像这样真正编辑缓冲区并更改文本样式。

我可以交互地使用屏幕来查找“b.txt”,但它没有突出显示(主要目标),而且我不知道是否可以编写屏幕命令脚本。所以我已经放弃了银幕。脚本命令只是将标准输出转储到文件,但我不想搜索文件。我需要搜索终端缓冲区并在屏幕上突出显示结果,而无需更多标准输出。我想要的已经出来了,只是需要突出显示。

我认为 ncurses 是可行的方法,但我从未用它编写过代码,而且它看起来很复杂。因此,在我深入研究之前,我想问是否有人可以想出另一种方法来做到这一点,并验证 ncurses 甚至可以做我想做的事情。

答案1

简短:不,你不能

更长:你不能这样做的原因是终端通常不允许程序复制文本他们的屏幕。可以通过迂回路径让 GUI 应用程序从终端屏幕选择文本,然后您知道文本是什么, 和在哪里是的,原则上您可以在终端中发出命令,告诉它使用任何颜色重新绘制屏幕的该部分。但这只是假设(除非有人最近编写了一个程序来做到这一点)。

顺便说一句,一旦文本滚动离开可见屏幕,终端也不会对其进行修改。

答案2

我会用vim.

对于你的具体情况,我会做

vim .

然后vim将向我显示一个窗口,其中包含目录中的所有文件。我可以使用 进行搜索/,然后按 来打开文件Enter

只需确保搜索突出显示已启用

:set hlsearch

对于不同的命令,也许这就足够了:

echo "one\ntwo\nthree" | vim -

相关内容