我不确定我的系统是否发生了某些变化,但我发现通过我的grep
命令过滤 Unix 手册页不起作用。你知道怎么了吗?
例如,考虑从以下代码编译的jq 手册页。
.
.IP "\(bu" 4
\fB\-\-slurp\fR/\fB\-s\fR:
.
.IP
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once\.
.
如果我想快速查找开关,那么我通常会通过以下终端会话显示--slurp
来过滤jq
手册页。grep
$ man jq | grep -- --slurp
$
注意什么都没有返回。这很奇怪,预期的结果类似于以下内容。
$ man jq | grep -- --slurp
• --slurp/-s:
这是意料之中的,因为如果我实际运行man jq
命令并使用/
搜索键,然后搜索--slurp
,那么就可以了。
# ...
• --slurp/-s:
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once.
我猜特殊字符有问题,但我不确定。我尝试通过命令放置手册页,cat
但这也没有用。我还尝试删除所有特殊字符——请参阅如何删除 Linux 文本中的所有特殊字符——但这也没有用。
$ man jq | cat | grep -- --slurp
$
$ man jq | sed $'s/[^[:print:]\t]//g' | grep -- --slurp
$
如果这是相关的,请查看有关我的系统的以下详细信息。
$ neofetch --off
OS: macOS 13.0.1 22A400 x86_64
Host: MacBookPro16,1
Kernel: 22.1.0
Uptime: 6 days, 1 hour, 3 mins
Packages: 145 (brew)
Shell: bash 3.2.57
Resolution: 1792x1120@2x
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: Monaco 12
CPU: Intel i7-9750H (12) @ 2.60GHz
GPU: Intel UHD Graphics 630, AMD Radeon Pro 5300M
Memory: 10425MiB / 16384MiB
我在我的 Mac 笔记本电脑上看到了和你一样的东西。我曾经
man -P cat
将寻呼机设置为 cat 而不是设置PAGER
或MANPAGER
环境变量。当我浏览 的手册页时man
,我发现这个接近尾声:所以我尝试
man jq | col -b | grep slurp
了,我得到了slurp
其中的台词,包括--slurp
参数台词。我认为最好的线索是手册页中的短语“没有退格和下划线”。果然,如果我允许每个字母之间有两个字符
slurp
,那么我会看到我期望的行:使用
od -a
检查其中一行--slurp
给我这个:这是一行的一部分,上面写着
Use --slurpfile instead.
The renderer apparently uses backspace and printing the letter again to represent bold printing of the string--slurpfile
。退格键和额外的字母使您的简单 grep 命令失败。(我也是)所以看起来
col -b
之前通过管道传递手册页grep
会让你按照你想要的方式搜索输出。