2012-05-07 52 views
-1

我想解析字符串(用awk/SED/grep的):解析字符串令牌的Unix

"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" 

而且結果應該是:

EffTimeStamp="20110203-210000" 
InputCtxNm="Forigen Exchange Today" 
RunType="EOD" 

請指教。

回答

1

它需要幾個不同的替換,但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" 
0

你用的是什麼外殼?對於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[@]}" 
0

或和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 

我希望這有助於。

+0

@Shelter:如何打印,如果有變化參數列表? 例如「EffTimeStamp = 20110203-210000#InputCtxNm = Forigen Exchange Today#RunType = EOD#RegionName = US#InstruID = 9999 .....」 –

+0

我編輯了我的解決方案以解決您的需求。祝你好運。 – shellter

0

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