AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 717072
Accepted
Jonathan Wheeler
Jonathan Wheeler
Asked: 2022-09-13 16:12:57 +0800 CST2022-09-13 16:12:57 +0800 CST 2022-09-13 16:12:57 +0800 CST

为什么“man -awK”可能包含与搜索词不匹配的结果?

  • 772

例子:

man -awK "typeset"

这已通过管道确认grep:

search=typeset
man -awK -- "$search" | xargs -I {} sh -c "echo '{}'
    man --no-hyphenation --no-justification -- {} | grep -iF -- '$search'"

结果:

/usr/share/man/man1/lcf.1.gz
/usr/share/man/man1/memusagestat.1.gz
/usr/share/man/man1/mtrace.1.gz
/usr/share/man/man1/nm-applet.1.gz
/usr/share/man/man1/nm-connection-editor.1.gz
/usr/share/man/man1/nroff.1.gz
       GROFF_ TYPESET TER 环境变量或 -T 命令行选项
       GROFF_ TYPESET TER
              并且GROFF_TYPESET TER 未设置。
/usr/share/man/man1/tfmtodit.1.gz
       要做好数学排版,groff需要font metric
/usr/share/man/man1/ptx.1.gz
       -t, --排版-mode - 未实现 -
/usr/share/man/man1/chrt.1.gz
/usr/share/man/man1/taskset.1.gz
/usr/share/man/man1/chem.1.gz
              用于排版化学结构图 [CSTR #122]。
       cm.bell-labs.com/netlib/typeset ting/chem.gz⟩ 。它的 README 文件用于
       排版化学结构图 [CSTR #122] ⟨http: //
/usr/share/man/man1/chacl.1.gz

请注意,前五个结果实际上根本不包含“排版”。其他搜索词的行为类似。

我正在使用 man 2.9.1 运行 Ubuntu 20.04.4 LTS (5.15.0-43-generic)。这似乎也是带有 man 1.6g 的 macOS 12.5 上的一个问题,这让我想知道我是否做错了什么?

man
  • 2 2 个回答
  • 47 Views

2 个回答

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2022-09-14T05:57:58+08:002022-09-14T05:57:58+08:00

    man -K搜索所有内容,包括手册页源文件中的注释。

    该字符串typeset作为 GNU GPL 许可标头的一部分出现在许多 GNU 和其他 GNU-GPL 许可程序中。

    .\" 这是免费文档;您可以重新分发它和/或
    .\" 根据 GNU 通用公共许可证的条款将其修改为
    .\" 由自由软件基金会发布;无论是版本 2
    .\" 许可证,或(由您选择)任何更高版本。
    .\"
    .\" GNU 通用公共许可证对“目标代码”的引用
    .\" 和 "executables" 将被解释为任何
    .\" 文档格式化或排版系统,包括
    .\" 中间和打印输出。
    …
    

    我没有提供方便的解决方法。但是手册页往往不会有很多评论,所以问题仅限于几句话。

    • 1
  2. Jonathan Wheeler
    2022-09-13T18:18:20+08:002022-09-13T18:18:20+08:00

    在我的Ubuntu系统上,问题是Gilles 在同一页面上的回答 details。我接受他的回答,因为他在这方面提供了他的专业知识。谢谢你,吉尔斯!

    在我的macOS系统上,这也是因为管道手册页仍然包含文档中搜索词中的控制字符,如man man | sed -n l.

    一种解决方案是首先使用 过滤掉控制字符col -b,这会删除格式:

    search=typeset
    man -awK -- "$search" | xargs -I {} sh -c "echo '{}'
        man --no-hyphenation --no-justification -- {} | \
        col -b | grep -iF --color=always -- '$search'"
    

    另一种解决方案是使用MAN_KEEP_FORMATTING=1和管道 to ul,它保留格式:

    search=typeset
    man -awK -- "$search" | xargs -I {} sh -c "echo '{}'
        MAN_KEEP_FORMATTING=1 man --no-hyphenation --no-justification -- {} | \
        ul | grep -iF --color=always -- '$search'"
    

    (有关ul解决方案的更多详细信息:指定— 如MAN_KEEP_FORMATTING=1所示 —man man对于 Ubuntu 20.04.4 似乎没有必要,但它似乎对 macOS 是必需的,并且它可能也适用于其他操作系统,因此只需将其包含为当然。Stéphane Chazelas在我的相关问题中详细介绍了另一种解决方案,但该解决方案仅适用于 Ubuntu,不适用于 macOS。)

    在任何一种情况下,唯一可靠的*解决方案似乎是使用 grep 执行第二遍过滤:

    * 假设您的搜索词不包含超过一行的单词(很可能只是一行末尾的单词,下一行开头的下一个单词)。如果是这样,也许过滤器使用pcre2grep -M 'search\s+term代替。

    search=typeset
    man -awK -- "$search" | \
        xargs -I {} sh -c "man --no-hyphenation --no-justification -- {} | \
        col -b | grep -qiF -- '$search' && printf '%s\n' '{}'"
    

    如果您想要更详细的代码解决方案来搜索手册页并突出显示结果,同时保留手册页格式(颜色/等),请参阅我的相关问题。

    • 0

相关问题

  • 如何显示猫(不是男人)页面?

  • 如何下载文档并使其可以从命令行访问?

  • 更新了 GNU/Linux 系统中 ifconfig 的手册页。

  • 手册页窗口中的可用命令在哪里记录,这些命令是否依赖于系统?

  • 将手册页导出到 postscript

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve