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

Bash中如何将*_*_*_*格式字符串截断为*_*?

在Bash中截断*_*_*_*格式字符串为*_*的几种方法

这需求我之前写脚本的时候常碰到,给你几个Bash下的实现方案,都能轻松把*_*_*_*格式的字符串截成前两段*_*:

方法1:Bash原生参数扩展(推荐,无外部命令)

这种方式不需要调用任何外部工具,纯Bash内置功能,效率最高,适合批量处理变量:

# 定义原始字符串
original_str="00001_99_AA_FLLLA"
# 从末尾删除最短的`_*_*`匹配(也就是去掉第二个下划线之后的所有内容)
truncated_str="${original_str%_*_*}"
# 输出结果
echo "$truncated_str"  # 会打印 00001_99

原理:%是Bash参数扩展的“从末尾删除最短匹配”操作符,_*_*表示匹配一个下划线+任意字符+另一个下划线+任意字符,刚好能精准删掉后两段内容。

如果觉得上面的匹配逻辑有点绕,也可以用拆分字段的方式,更直观:

original_str="00001_99_AA_FLLLA"
# 按下划线分割字符串,把前两个字段存到变量,剩下的忽略
IFS=_ read -r part1 part2 _ <<< "$original_str"
# 拼接前两个字段
truncated_str="${part1}_${part2}"
echo "$truncated_str"

方法2:用cut命令处理

cut是专门做字段提取的工具,语法简单直接,适合管道流处理:

# 直接处理字符串输出
echo "00001_99_AA_FLLLA" | cut -d '_' -f 1,2
# 处理变量的写法
original_str="00001_99_AA_FLLLA"
truncated_str=$(echo "$original_str" | cut -d '_' -f 1,2)
echo "$truncated_str"

参数说明:-d '_'指定分隔符为下划线,-f 1,2表示提取第1和第2个字段,默认会用原分隔符连接两个字段。

方法3:用awk命令处理

awk擅长处理结构化文本,灵活性更高,如果后续还要做其他字段操作,这个方法扩展性更强:

# 直接处理字符串输出
echo "00001_99_AA_FLLLA" | awk -F '_' '{print $1 "_" $2}'
# 处理变量的写法
original_str="00001_99_AA_FLLLA"
truncated_str=$(awk -F '_' '{print $1 "_" $2}' <<< "$original_str")
echo "$truncated_str"

参数说明:-F '_'设置字段分隔符为下划线,print $1 "_" $2表示打印第1、2字段并手动用下划线连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:59:28