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

如何在Bash中切割字母数字字符串?寻求非sed/awk方案

不依赖sed/awk的字符串分割方案

针对你需要拆分的字符串格式(最后一个-分隔前缀和日期),这里提供几种不用sed、awk的实现方式:

方法1:Bash 内置参数扩展

利用bash自带的参数扩展就能轻松拆分,无需额外工具:

处理单个字符串

str="ABC-CDE-DEF-2023.03.14"
a="${str%-*}"  # 截取最后一个'-'之前的部分
b="${str##*-}" # 截取最后一个'-'之后的部分
echo "a=$a  b=$b"

批量处理文件中的行

假设待处理的字符串每行一个,存在input.txt文件中:

while IFS= read -r line; do
    [ -z "$line" ] && continue
    a="${line%-*}"
    b="${line##*-}"
    echo "a=$a  b=$b"
done < input.txt

方法2:Python 单行/脚本实现

如果系统装有Python,用它的字符串拆分功能也很方便:

单行命令批量处理

python -c "import sys; [print(f'a={l.strip().rsplit(\"-\",1)[0]}  b={l.strip().rsplit(\"-\",1)[1]}') for l in sys.stdin if l.strip()]" < input.txt

脚本形式(更易读)

with open('input.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        prefix, date = line.rsplit('-', 1)
        print(f"a={prefix}  b={date}")

这里rsplit('-',1)表示从字符串右侧只做一次拆分,刚好把最后一个-作为分界点。

方法3:Perl 单行命令

Perl的正则拆分也能实现需求:

perl -ne 'chomp; next if /^\s*$/; ($a,$b) = split /-(?=[^-]+$)/; print "a=$a  b=$b\n"' input.txt

正则-(?=[^-]+$)会匹配最后一个-(确保后面没有其他-),以此拆分出两部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:02:52