2012-05-08 5 views
-1

Environnement: KornShell (ksh)découpant une chaîne en arguments (en utilisant sed/awk)

Je veux séparer la chaîne ci-dessous:

-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK 

Et sortie doit être (chaîne après -UP devrait rester comme un seul jeton):

-ssRMDFXXRT 
-rtETL 
-ltDAILY 
-sD20120203 
-lfRS 
-UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" 
-QqDESKTOP 
-Ln9999 
-XmXMLBLOCK 

J'ai essayé beaucoup mais ne pouvait pas obtenir le résultat attendu, mais maintenant je pense que je besoin d'aide. S'il vous plaît aider.

+0

Voulez-vous analyser les arguments transmis à votre script? –

Répondre

1
for arg in "[email protected]"; do printf '<%s>\n' "$arg"; done 

Ceci itére sur tous les arguments et ne casse pas les arguments aux espaces.

0
krithika.542> echo "-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK" | perl -pe 's/ /\n/g' 
-ssRMDFXXRT 
-rtETL 
-ltDAILY 
-sD20120203 
-lfRS 
-UPEffTimeStamp=20110203-210000#InputCtxNm=Forigen 
Exchange 
Today#RunType=EOD 
-QqDESKTOP 
-Ln9999 
-XmXMLBLOCK 
krithika[ncm_o12.0_int.cctcsvibh].543> 
0

Vous devez utiliser eval pour obtenir le shell pour respecter l'argument cité

$ str='-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK' 
$ arr=($str); echo ${#arr[@]} 
11 
$ arr=("$str"); echo ${#arr[@]} 
1 
$ eval arr=($str); echo ${#arr[@]} 
9 

ensuite à afficher en ligne: printf "%s\n" "${arr[@]}"
Vous remarquerez les guillemets doubles ont disparu de la argument "complexe".

Mais, votre chaîne initiale n'est pas "$*" droite? Si c'est le cas, utilisez "[email protected]" à la place.