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

如何使用Bash通过Sed或Awk删除文本文件中数字大于4的条目?

用Sed/Awk过滤文本条目:删除数字大于4的内容,及范围过滤方案

首先,针对你要删除数字大于4的条目的需求,用Awk或者Sed都能轻松实现,先明确你的输入输出目标:

输入文本:Coffee 3 chocolate 4,5 fish 2 tomatoes 6 ……
期望输出:Coffee 3 fish 2

方案1:用Awk处理(更直观,适合字段型结构)

Awk天生擅长处理结构化字段,考虑到你输入里的4,5可能是欧洲格式的小数(逗号作小数点),我们先统一格式再判断:

awk '{
    gsub(/,/, ".", $0);  # 把逗号换成点,统一小数格式
    for (i=1; i<=NF; i+=2) {
        num = $(i+1) + 0;  # 把字符串转成数字,自动忽略多余空格
        if (num <= 4) {
            printf "%s %s ", $i, $(i+1);
        }
    }
    print ""
}' your_file.txt | sed 's/ $//'  # 去掉末尾多余的空格

这样处理后,4,5会被转为4.5(数值大于4),对应的chocolate条目会被过滤,正好得到你想要的输出。

方案2:用Sed处理(正则匹配方式)

如果更习惯用Sed的正则替换,可以把每个条目拆出来单独判断,再合并结果:

sed -E '
    s/,/./g;  # 先统一小数格式
    :loop
    s/([[:alpha:]]+) ([0-9.]+)( |$)/\n\1 \2\n/g;  # 把每个"名称+数字"条目拆成单独行
    /^[[:alpha:]]+ ([0-9.]+)$/{
        # 删除数字>4的条目:整数≥5,或4.x且x>0的小数
        / ([5-9]|[0-9]{2,}|4\.[1-9][0-9]*)$/d;
    }
    s/\n([[:alpha:]]+ [0-9.]+)\n/ \1 /g;  # 把保留的条目合并回一行
    s/^ //; s/ $//; s/  +/ /g  # 清理首尾和多余空格
' your_file.txt

关于删除特定范围的数字及文字:完全可行!

不管你要删除数字在[a,b]闭区间、(a,b)开区间,还是其他自定义范围的条目,只要调整判断条件就能实现,举两个实用例子:

例子1:删除数字在2到4之间的条目(保留<2或>4的)

用Awk的话,修改判断逻辑即可:

awk '{
    gsub(/,/, ".", $0);
    for (i=1; i<=NF; i+=2) {
        num = $(i+1) + 0;
        if (!(num >=2 && num <=4)) {  # 只保留不在2-4范围内的条目
            printf "%s %s ", $i, $(i+1);
        }
    }
    print ""
}' your_file.txt | sed 's/ $//'

针对你的输入,会输出tomatoes 6(Coffee 3、fish 2都在2-4范围内被删除)。

例子2:删除数字在3.5到6之间的条目

用Sed的话,调整正则的匹配规则:

sed -E '
    s/,/./g;
    :loop
    s/([[:alpha:]]+) ([0-9.]+)( |$)/\n\1 \2\n/g;
    /^[[:alpha:]]+ ([0-9.]+)$/{
        # 删除3.5到6的数字:3.5及以上的小数、4-6的整数
        / (3\.[5-9][0-9]*|[4-6]|6\.0*)$/d;
    }
    s/\n([[:alpha:]]+ [0-9.]+)\n/ \1 /g;
    s/^ //; s/ $//; s/  +/ /g
' your_file.txt

针对你的输入,会输出Coffee 3 fish 2(chocolate 4.5、tomatoes 6都在范围内被删除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:48