2016-11-10 10 views
0

私のスクリプトでは文字列値が別々の2刺さ

QUEUE_VALUE=ABC:CDE 

以下のように来ている私は、出力は私が命令の下、私はABC","CDE

として出力を取得していて試してみました "ABC","CDE"

である必要があります

echo ${QUEUE_NAME} | sed s/:/\"\,\"\/g 

私に助けてください、より良いコマンドがありますか?ここでは、2つの部分に=によって分離された第2のフィールドを分割し、あなたの必要性に従ってそれをフォーマット:

$ echo $QUEUE_VALUE | sed -e 's/[^:]*/"&"/g' -e 's/:/,/g' 
"ABC","CDE" 
+0

なぜ値が$ QUEUE_VALUEにある場合に$ QUEUE_NAMEをエコーし​​ますか? –

答えて

1

あなたはこのsedを試すことができます。

0

echo ${QUEUE_NAME} | sed s/:/\"\,\"\/g | sed "s/.*/\"&\"/"

+1

このコードスニペットは、あなたの投稿の質を向上させるための説明(本当に助けます)(// meta.stackexchange.com/q/114762)を含む質問を解決するかもしれませんが。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

+1

質問の文脈を考えれば、この答えは自明です。特に、上記の2つの回答が受け入れられたものを含め、事実上同じである場合 –

1
echo QUEUE_VALUE=ABC:CDE | awk -F= '{split($2,a,":");print "\"" a[1] "\",\""a[2] "\""}' 
"ABC","CDE" 

awkソリューションを:

0

あなたのsedコマンドは、必要なもののほとんどを処理します。各:","に置き換えると、すべての区切り文字が処理されます。あなたはその後、二重引用符で入力の始まり(^)とend($)の両方を交換したいと思うでしょう:上記で

echo "$QUEUE_VALUE" | sed -e 's/:/","/g' -e 's/^/"/' -e 's/$/"/' 

、私はので、単一引用符でのsedコマンドを書きました私たちは拡大を望んでおらず、多くのバックスラッシュを必要とせずに、より明確に書くことができます。


これはBashで行うことができる置換です。主要部分は"${QUEUE_VALUE//:/\",\"}"(または単純な引用のための"${QUEUE_VALUE//:/'","'}"を)書かれており、最初と最後の引用符を追加するのは簡単です:

echo \""${QUEUE_VALUE//:/'","'}"\" 

思考の別の方法ではない任意の文字の実行を交換することです:を同じ引用符で囲み、:をカンマで置き換えます。そのためのsedコマンドは

sed -e 's/[^:]*/"&"/g' -e 'y/:/,/' 

(空要素が正しく引用されますように、私たちは、ゼロ以上非コロン文字と一致していることに注意してください。)これは、そう簡単に純粋で行うことができないものですバッシュ。

関連する問題