我有一個 bash 腳本,其中有一個以 python-list 格式存盤值的變數:
Business_Unit=["A","B","C,D","E F"]
并且需要回圈獲得:
A
B
C,D
E F
腳本應在雙引號內保留逗號、空格和任何特殊字符。我嘗試過使用 sed, IFS,但它也在字串中分割逗號的行。
uj5u.com熱心網友回復:
Sed 為我做到了:
echo "$Business_Unit" |
sed 's/^[^"]*"//;s/"\]//;s/","/\n/g' |
# ----------- ------- ----------
# | | |
# | | substitute "," by a new line
# | remove the last quotes and ]
# remove everything upto and including the first "
while read line ; do
echo "$line"
done
uj5u.com熱心網友回復:
因為這個問題被標記重擊
您可以使用csv
bash 插件:
string='Business_Unit=["A","B","C,D","E F"]'
enable -f /usr/lib/bash/csv csv
csv -a myarray "${string//[][]/,}"
printf "%s\n" "${myarray[@]:1}"
A
B
C,D
E F
解釋:
${string//[][]/,}
將方括號]
和[
逗號轉換,
。- 所以
csv
將決議行以$myarray
添加第一個包含Business_Unit=
和尾隨空欄位的欄位。
正確地說,為了避免最后一個空欄位,您最好使用:
printf "%s\n" "${myarray[@]:1:${#myarray[@]}-2}"
A
B
C,D
E F
uj5u.com熱心網友回復:
如果sed
是一個選項,您可以嘗試;
$ sed s'/[][]\|\("\),/\1/g;s/""/\n/g;s/"//g' <<< $Business_Unit
A
B
C,D
E F
或者,如果您需要先轉換變數以使引號存在,您可以嘗試;
$ sed 's/\([A-B]\)\(,\)/"\1"\2/g;s/\([A-Z]\(,\| \)\?[A-Z]\)/"&"/g;s/[][]\|\("\),/\1/g;s/""/\n/g;s/"//g' <<< $Business_Unit
A
B
C,D
E F
uj5u.com熱心網友回復:
string='Business_Unit=["A","B","C,D","E F"]'
awk -F\" '{for(i=2; i<=NF; i =2) print $(i)}' <<< $string
A
B
C,D
E F
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470206.html