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

如何在Bash中找出文本文件中的拼写错误单词

解决文本拼写错误检测问题

针对你的需求——从带大小写、标点的文本中找出不在词典里的错误单词(包括带标点的合法单词),可以通过预处理词典+文本分词校验的组合命令实现,下面是具体步骤:

步骤1:预处理词典文件

首先把你的词典文件(比如dict.txt,内容是a、description、of、task、to、do)转换成每行一个小写单词的格式,方便后续匹配:

sed 's/、/\n/g' dict.txt | tr '[:upper:]' '[:lower:]' | sort -u > clean_dict.txt

解释:

  • sed 's/、/\n/g':把中文顿号分隔的内容换成换行,拆分每个词
  • tr '[:upper:]' '[:lower:]':统一转成小写,消除大小写差异
  • sort -u:去重并排序(可选,但能加快后续查询)

步骤2:编写校验脚本

用awk编写脚本(保存为check_errors.awk),实现以下逻辑:

  1. 加载预处理后的词典到内存数组
  2. 遍历文本文件的每个单词,保留原词
  3. 生成该单词的"干净版本":转小写+去除所有标点
  4. 判断:如果干净版本不在词典里,或者原词带有标点,就输出原词

脚本内容:

BEGIN {
    # 加载干净词典到数组
    while ((getline line < "clean_dict.txt") > 0) {
        valid_words[line] = 1
    }
    close("clean_dict.txt")
    # 定义需要匹配的标点符号集合
    punct_regex = /[[:punct:]]/
}

# 处理每行的每个单词
{
    for (i = 1; i <= NF; i++) {
        original = $i
        # 生成干净版本:转小写+去标点
        clean = tolower(original)
        gsub(/[[:punct:]]/, "", clean)
        
        # 判断是否输出:干净词不在词典,或者原词带标点
        if (!(clean in valid_words) || original ~ punct_regex) {
            print original
        }
    }
}

步骤3:运行脚本并输出结果

假设你的文本文件是text.txt(内容:A discreption of a task to do.),执行命令:

awk -f check_errors.awk text.txt > errors.txt

打开errors.txt就能看到期望的结果:

discreption
do.

为什么之前的工具没用?

你试过的diff/comm/cmp都是基于整行或整字符串的精确对比,没法处理大小写、标点的干扰;grep默认也是精确匹配,除非写复杂的正则,但很难兼顾所有情况。而上面的方法先统一格式,再分条件判断,能精准匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:27