如何从所有手册页中搜索字符串

如何从所有手册页中搜索字符串

什么命令可以显示 Bash 手册页中包含字符串“大括号扩展”(忽略大小写)的所有行?

我尝试过man -wK . | grep "[Bb]race [Ee]xpansion"遇到一系列“无法断线”错误。

man -s1 -Kw --regex 'brace expansion'然后我在阅读查询后 尝试使用命令进行搜索如何搜索手册页中包含连字符的模式?

我回来了:

/usr/share/man/man1/bash.1.gz 

我尝试使用打印文件cat并得到所有奇怪的符号。

答案1

当您运行该命令时,您将在系统的默认寻呼机(通常)man bash中打开文档。less要跳到与特定模式匹配的行,您可以键入/<pattern>。例如,进入手册页后立即输入:

/brace expansion

然后您应该会自动转到第一个出现的位置。从那里您可以按n转到稍后的事件。

文件扩展名还.gz意味着该文件是使用 gzip 压缩的。您将无法直接读取该文件。

答案2

搜索结果 - 系统上的手册页源文件 - 可以在本地模式下传回 man 以读取每个页面。

man -wK --regex 'Brace Expansion' | sort -u | xargs man -l -P cat | grep -inF 'Brace Expansion'

默认情况下,用于 man 命令搜索的正则表达式不区分大小写。搜索结果列表已排序,所有重复项均被删除。然后,使用 传回给 man xargs。通过使用cat分页器,每个处理后的手册页都可以打印到标准输出。此时,数据是 grep 可以操作的纯文本流。

选项用于激活本地模式,直接解析文件而不是解析系统的 MANPATH -lman

选项-P catman寻呼机设置为cat。这意味着处理后的手册页将使用显示cat

选项用于不区分大小写的搜索-igrep-n选项打印出行号(只是为了方便而添加)。该-F选项指定模式是固定字符串。

答案3

根据您最初的问题,以下命令将显示 bash 手册页中包含“大括号扩展”的所有行:

for page in $( man -k bash | awk '{print $1}' ); do
    zgrep -i -n  'brace expansion' $(man -w $page) /dev/null
done

首先,您获得了与描述中的“bash”相对应的手册页列表,然后迭代检索到的列表并搜索匹配的“大括号扩展”字符串。 zgrep(1) 会默默地为您解压缩文件;)

相关内容