【问题标题】:grep/sed/awk paragraphs or sections from lynx output for a dictionary definition来自 lynx 输出的 grep/sed/awk 段落或部分以获取字典定义
【发布时间】:2021-10-01 10:21:11
【问题描述】:

我有一个 bash 函数,可以让我查看来自 Google 的单词定义:

defword() {
    if [ -z $2 ]; then
        header=30
    else
        header=$2
    fi
    lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | grep -v "\[1\] Google" | grep -v "define: ${1}__" | grep -v "\[2\]IMAGES" | head -${header}
}

例如defword dog 将显示 'dog' 的前 30 行输出,defword dog 50 将显示前 50 行。

我突然想到,如果我能抓住“名词”、“动词”、“维基百科”等部分,这可能会更清晰。

您能否建议我可以运行的方法(可能使用 grep、sed 或 awk?)说 defword dog noun 将显示整个名词部分(从单词“名词”到下一部分之前的空白行)、defword dog noun 2 仅显示名词部分的定义 2(如果存在这些部分,则“动词”或“形容词”也相同),以及 defword dog wikipedia 显示出现在名词和动词下方的维基百科定义(可以通过使用上述功能执行defword dog 100 来查看该维基百科部分)?

【问题讨论】:

  • 虽然这不能直接回答您的问题,但您最好使用诸如dictionaryapi.dev 之类的 API 运行 curl https://api.dictionaryapi.dev/api/v2/entries/en/dog 会得到一个 json 格式的结果,通过管道到类似的东西很容易解析jq
  • 会有其他 API 用于各种事情 - API 通常用于程序与网页对话 - 许多网页都有自己的 API,包括 google 的所有服务(@ 987654322@) 。请注意,它们通常很难上手,因为它们需要设置密钥并且请求有限。上面的字典恰好很简单。
  • 如果我需要在命令行上执行此操作,我总是使用 jq,或者使用 python 及其 json 包进行更多涉及的工作。对于字典,jq 命令将是 jq '.[] | .meanings[] | select(.partOfSpeech=="noun") | .definitions | .[].definition'
  • 事实证明我给你的链接 dictionaryapi.dev 只是搜索谷歌并进行你正在寻找的文本处理!它的开发者在这里展示了它:stackoverflow.com/a/48983463/1581658 它是用 javascript 而不是 bash 编写的
  • 哦,当然,我知道一般的 API 是什么(我在各种编程中一直使用它们),但我以前从未见过这样的网页。我玩过字典之一,但奇怪的是(因为你说它只是搜索谷歌)与谷歌的结果相比,它似乎缺乏定义。非常感谢jqsn-p,太好了,我会建立一些样本并保存在我的个人资料中,将来我一定会好好利用这些。 ??????

标签: bash sed grep lynx


【解决方案1】:

使用 sed (https://unix.stackexchange.com/a/264977) 可以在两行之间进行匹配

要在你的行之间匹配,你可以管道到

  sed -n '/^   noun$/,${p;/^$/q}'

这可以让你的整个脚本被整理得恰到好处

lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | sed -n '/^   '"${2:-noun}"'$/,${p;/^$/q}'

在 bash 中也使用默认参数语法 (https://coderwall.com/p/s8n9qa/default-parameter-value-in-bash)

【讨论】:

  • 我认为您应该将 sed 模式写在单引号中,然后更改为仅用于扩展的双引号,这样您还可以避免将来出现类似 ${p;/^$/q} 被解释的问题壳。
  • @andlrc 好点:编辑这样做
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多