You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用grep/sed/awk优化bash查词函数defword实现分区段取释义

优化后的defword函数实现
defword() {
    # 拉取并预处理原始释义内容
    local raw_content
    raw_content=$(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")

    # 兼容旧用法:无第二个参数或第二个参数为数字时,输出前N行内容
    if [ -z "$2" ] || [[ "$2" =~ ^[0-9]+$ ]]; then
        local header=${2:-30}
        echo "$raw_content" | head -"$header"
        return 0
    fi

    local section="$2"
    local entry_idx="$3"

    # 维基百科区段抓取逻辑
    if [ "$section" = "wikipedia" ]; then
        echo "$raw_content" | awk '
        /Wikipedia/ { in_wiki=1; print; next }
        in_wiki {
            if ($0 ~ /^ *$/) exit
            print
        }'
        return 0
    fi

    # 词性(noun/verb等)区段抓取逻辑
    echo "$raw_content" | awk -v sec="$section" -v idx="$entry_idx" '
    BEGIN { IGNORECASE=1 }
    $0 ~ "^ *"sec { in_sec=1; print; next }
    in_sec {
        if ($0 ~ /^ *$/) exit
        if (idx != "") {
            if ($0 ~ /^ *[0-9]+\./) {
                count++
                if (count == idx) {
                    print
                    exit
                }
            }
        } else {
            print
        }
    }'
}
使用说明
  • 输出完整名词释义:执行 defword dog noun,会打印从noun开头到下一个空行前的全部名词区段内容
  • 输出指定序号的词性释义:执行 defword dog noun 2,仅打印名词区段的第2条释义,动词、形容词等其他词性的用法完全一致
  • 输出维基百科释义:执行 defword dog wikipedia,会打印对应单词的维基百科释义片段
  • 兼容原有使用逻辑:执行 defword dog 默认输出前30行内容,执行 defword dog 50 输出前50行内容

内容的提问来源于stack exchange,提问作者YorSubs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:27:03