Linux脚本需求:拆分字符串并提取非整数字段拼接结果
解决Linux脚本字符串拆分与过滤问题
先给你指出原脚本的几个问题:
- 变量赋值不能有空格,
item = xxx这种写法会报错,得改成item="grub2-systemd-sleep-plugin-2.02-153.1" read -rasplitIFS里少了空格,应该是read -ra splitIFS <<< "$item",否则命令会识别错误
接下来是实现需求的完整脚本:
# 正确赋值变量,注意不要有空格 item="grub2-systemd-sleep-plugin-2.02-153.1" # 按"-"拆分字符串到数组 IFS='-' read -ra split_arr <<< "$item" # 初始化结果变量 result="" # 遍历数组每个元素 for word in "${split_arr[@]}"; do # 判断当前元素是否为纯整数(只包含数字) if ! [[ "$word" =~ ^[0-9]+$ ]]; then # 如果不是整数,拼接到结果里,注意处理开头的"-" if [ -z "$result" ]; then result="$word" else result="$result-$word" fi fi done # 输出最终结果 echo "$result"
运行这个脚本就能得到grub2-systemd-sleep-plugin的预期输出。
关键逻辑说明:
- 用
[[ "$word" =~ ^[0-9]+$ ]]正则匹配纯整数,!表示取反,只保留不匹配的元素 - 拼接时判断结果是否为空,避免开头多出来一个
-
内容的提问来源于stack exchange,提问作者saravanan jothilingam
相关产品推荐
相关产品推荐

