簡體   English   中英

使用定界符循環遍歷字符串(鍵,值)-Bash腳本

[英]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
  1. 刪除#的開頭和結尾( -E解釋正則表達式為擴展名)
  2. 替換#\\n
  3. 使用while讀取整行包括空格
  4. 將行拆分為鍵值對並刪除空格

您可以使用以下方法(僅適用於帶有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"

  • s / ## * / \\ n / g _________用\\ n替換每個或多個#
  • s / ^ \\ n \\ | \\ n $ // g _______用空替換第一行和最后一行
  • s /,/用/ g _________替換','為'有'
  • s / \\ n \\ | $ / values&/ g ___用'values'替換每行的結尾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM