我正在寻找选项来读取具有逗号分隔字段的变量(例如:a,b,c,d,e,f
)并从中生成另一个变量(例如:a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'
)。我试过'FOR'循环方法,但最后添加逗号。例如:
Var1=a,b,c,d,e,f
预期产量:
Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'
for i in $(echo $Var1 | sed "s/,/ /g")
do
Var2="$i"",'""$i""',"
fi
done
我的Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f',
以逗号结尾是否有任何好的方法来完成它而不会变得更复杂?
谢谢DMP
这是在sed
做到这一点的方法。
$ var1="a,b,c,d,e,f,"
$ var2=$(sed -e "s/[a-z]/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo $var2
a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'
-e
中的第一个sed
重复单个字符,然后下一个-e
删除结束逗号,
。
如果var1
在每个逗号,
之间有多个字符,则上述操作无效。为此,-E
或regex
选项为sed
$ var1='abc,192,hk3,def,HoZ,'
$ var2=$(sed -E -e "s/[a-zA-Z0-9]+/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo "$var2"
abc,'abc',192,'192',hk3,'hk3',def,'def',HoZ,'HoZ'
你将不得不以这种或那种方式处理额外的逗号。
这就是我提供的解决方案。我也使用实际数组来确保我们可以处理带空格的字符串:
#!/usr/bin/env bash
# Input variable
VAR1=a,b,c,d,e,f
# Read VAR1 into an array
IFS=',' read -r -a VAR1_ARRAY <<< ${VAR1}
VAR2=''
for EL in ${VAR1_ARRAY[@]}; do
VAR2="${VAR2},${EL},'${EL}'"
done
# Remove a leading comma
VAR2=${VAR2:1:${#VAR2} - 1}
echo ${VAR2}
输出:
a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'