[英]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.