[英]Looping through a string(key,value) with delimiter- Bash Scripting
我有一个值存储在像
input="###key1,value1###key2,value2###key3,value3###"
我想输出像
key1 has value1 values
key2 has value2 values
key3 has value3 values
有人可以帮我解决如何使用bash脚本中的循环来实现它吗?
谢谢,:)
还有一个疑问,如果
input="###key1, value1###key2, value2###key3,value3###
值前面有空格? 如何修剪呢?
这是在bash中使用循环的一种方法。
lee:~/StackOverFlow $ cat test.sh
input="$1"
input="$(echo "$input" | sed -E 's/^#+//; s/#+$//; s/#+/\\n/g;')"
echo -e "$input" | while read item; do
k="$(echo $item | awk -F\, '{print $1}' | sed -E 's/^[[:space:]]+//')"
v="$(echo $item | awk -F\, '{print $2}' | sed -E 's/^[[:space:]]+//')"
echo "$k has $v values"
done
输出量
lee:~/StackOverFlow $ bash test.sh "###key1,value1###key2,value2###key3,value3###"
key1 has value1 values
key2 has value2 values
key3 has value3 values
lee:~/StackOverFlow $ bash test.sh "###key1, value1###key2, value2###key3,value3###"
key1 has value1 values
key2 has value2 values
key3 has value3 values
#
的开头和结尾( -E
解释正则表达式为扩展名) #
与\\n
您可以使用以下方法(仅适用于带有P
标志的grep版本):
#!/usr/bin/env bash
input="###key1,value1###key2,value2###key3,value3###"
eval $(grep -oP '[^#]*(?=###)' <<< $(echo "$input") | sed "s/,/=/")
echo $key1
echo $key2
echo $key3
输出:
value1
value2
value3
对于第二种情况,必须删除=
周围的空格,因此,代替sed "s/,/=/"
您需要sed "s/,/=/;s/ *//"
与gnu sed
sed 's/##*/\n/g;s/^\n\|\n$//g;s/,/ has /g;s/\n\|$/ values&/g' <<<"$input"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.