我想解析字符串(用awk/SED/grep的):解析字符串令牌的Unix
"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
而且結果應該是:
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
請指教。
我想解析字符串(用awk/SED/grep的):解析字符串令牌的Unix
"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
而且結果應該是:
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
請指教。
它需要幾個不同的替換,但sed
可以做到這一點。
sed 's/^"//; s/=/="/g; s/#/"\n/g'
例如,
% echo '"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"' |
sed 's/^"//;s/=/="/g;s/#/"\n/g'
EffTimeStamp="20110203-210000"
InputCtxNm="Forigen Exchange Today"
RunType="EOD"
你用的是什麼外殼?對於bash,你可以寫
str="EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"
oifs=$IFS
IFS="#"
set -- $str
IFS=$oifs
printf "%s\n" "[email protected]"
輸出
EffTimeStamp=20110203-210000
InputCtxNm=Forigen Exchange Today
RunType=EOD
如果你不想使用位置參數,可以將值存儲爲一個數組:
arr=($str)
printf "%s\n" "${arr[@]}"
或和awk解決方案
echo "EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" \
| awk -F# -v OFS="\n" '{for (i=1;i<=NF; i++) printf("%s%s", $i, (i==NF ? "\n" : OFS)) }'
輸出
EffTimeStamp=20110203-210000
InputCtxNm=Forigen Exchange Today
RunType=EOD
我希望這有助於。
與perl
修改$/
(輸入記錄分隔符)和$\
(輸出記錄分隔符),一個簡單的辦法:
echo -e "EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" |
perl -pe 'BEGIN { $/ = q[#]; $\ = qq[\n] }'
輸出:
EffTimeStamp=20110203-210000#
InputCtxNm=Forigen Exchange Today#
RunType=EOD
@Shelter:如何打印,如果有變化參數列表? 例如「EffTimeStamp = 20110203-210000#InputCtxNm = Forigen Exchange Today#RunType = EOD#RegionName = US#InstruID = 9999 .....」 –
我編輯了我的解決方案以解決您的需求。祝你好運。 – shellter