首页 > 解决方案 > 解析特定格式的字符串并存储其内容以供进一步处理

问题描述

我有一个格式如下的字符串。LHS 上的字符串可以是任何字符串,RHS 上的结果在 {} 中具有不同长度的值,其中一些由分隔符分隔。

我无法理解如何将 LHS 和 RHS 提取为两个不同的变量。

输入字符串格式:

[TEAM DETAILS]={2,TeamName,23,4697}

我希望能够提取 LHS 让我们说成一个数组。对于 RHS,我需要处理以逗号分隔的每个条目并将它们也存储到一个数组中。

我无法理解如何做到这一点。它看起来很简单,但我无法从中得到逻辑。

标签: bashshell

解决方案


这个脚本:

# input
in="[TEAM DETAILS]={0001/0880,TeamName,0881,0882/3999,8400/8499,4900/4999,6900/6999,9101,9104,5851,5850,5855,7697}"

# get var name
# remove everything after ]=
var="${in%]=*}"
# remove the leading [
var="${var#[}"

# get values
# remove everything before ={
valstr="${in#*={}"
# remove trailing }
valstr="${valstr%'}'}"
# read string as array
IFS=, read -r -a "values" <<<"$valstr"

# output
declare -p var values

将在 repl 中输出

declare -- var="TEAM DETAILS"
declare -a values=([0]="0001/0880" [1]="TeamName" [2]="0881" [3]="0882/3999" [4]="8400/8499" [5]="4900/4999" [6]="6900/6999" [7]="9101" [8]="9104" [9]="5851" [10]="5850" [11]="5855" [12]="7697")

推荐阅读