grep/sed/awk 个字典定义的 lynx 输出中的段落或部分

grep/sed/awk paragraphs or sections from lynx output for a dictionary definition

我有一个 bash 函数,可以让我看到来自 Google:

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

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

我突然想到,如果我可以抓住 'noun'、'verb'、'wikipedia' 部分等,这可能是更清晰的输出。

你能建议我可以 运行 说 defword dog noun 显示整个名词部分(来自单词 'noun' 到下一节之前的空白行),defword dog noun 2 仅显示名词部分的定义 2(如果存在这些节,则 'verb' 或 'adjective' 也是如此),以及 defword dog wikipedia 显示出现在名词和动词下方的维基百科定义(可以通过使用上述功能执行 defword dog 100 来查看维基百科部分)?

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

要在您的线路之间进行匹配,您可以通过管道传输到

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

这可以让你的整个脚本被整理成

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

同时使用 bash (https://coderwall.com/p/s8n9qa/default-parameter-value-in-bash)

中的默认参数语法