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

如何保留文本中的's'?提取含撇号单词的命令优化问题

这个问题我碰到过好几次啦——核心是原命令里的tr没有把撇号当成单词的一部分,所以才把dog's拆成了两个词。咱们来一步步解决:

1. 快速修复:调整tr的保留字符集

原命令里的tr -cs '[:alnum:]' '[*\n]'只把字母数字视为单词的组成部分,撇号被归类为“非单词字符”,会被替换成分隔符,直接导致dog's拆成dog和s。

我们只需要把撇号加入到tr要保留的字符集中,就能让dog's完整被识别为一个单词:

cat simple2.txt | tr -cs "[:alnum:]'" '\n' | sort | uniq -c | sort -nr | head -10

这里把原命令的[:alnum:]改成了[:alnum:]',tr只会把除字母数字和撇号之外的字符替换成换行,统计结果就会变成你期望的:1 the 1 dog's。

2. 更严谨的方案:用awk处理复杂场景

如果你的文本里还有其他混杂的标点(比如dog's!或者"the"),上面的tr可能还会保留多余符号。这时候用awk更灵活,能先清理单词再统计:

awk '{
    for(i=1;i<=NF;i++){
        # 去掉单词首尾的非字母数字/撇号字符
        gsub(/^[^[:alnum:]']+|[^[:alnum:]']+$/,"",$i)
        if($i != "") count[$i]++
    }
} END{
    for(word in count) print count[word], word
}' simple2.txt | sort -nr | head -10

这个命令会先把每个单词首尾的垃圾字符(比如引号、感叹号)去掉,再进行统计,适合处理更复杂的文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:37