2016-11-21 20 views
0

XMLファイルをデスクトップにエクスポートしてから、「id」タグ内のすべてのデータを抽出してcsvファイルにエクスポートするスクリプトがあります。Bashの変数から先導スペースを削除する

xmlstarlet sel -t -m '//id[1]' -v . -n </users/$USER/Desktop/List.xml > /users/$USER/Desktop/List2.csv 

次に、次のコマンドを使用して各番号の後にカンマを追加し、変数として格納します。

私はその変数をエコーし​​た場合、私はこのような出力を得る
devices=$(sed "s/$/,/g" /users/$USER/Desktop/List2.csv) 

:私は出力が123124125のようになりますように、これらのスペースを削除して助けが必要何

123, 
124, 
125, 

など

先頭のスペースはありません。私は働くことができない複数のソリューションを試しました。どんな助けも素晴らしいだろう!

答えて

4

改行が不要な場合は、最初にxmlstarletに入力しないようにしてください。

各値ではなく、改行の後にコンマを入れて-o ,-nを変更、次のとおりです。

{ xmlstarlet sel -t -m '//id[1]' -v . -o ',' && printf '\n'; } \ 
    <"https://stackoverflow.com/users/$USER/Desktop/List.xml" \ 
    >"https://stackoverflow.com/users/$USER/Desktop/List2.csv" 

xmlstarletはそのを書き終えた後、ここprintf '\n'は、CSVファイルの末尾に最後の改行を置きます出力。

あなたは、これは、出力ファイルに残し末尾,をしたくない場合は、それを取り除くことする最も簡単な方法は、変数へxmlstarletの結果を読み、そこにそれを操作することである。

content=$(xmlstarlet sel -t -m '//id[1]' -v . -o ',' <"https://stackoverflow.com/users/$USER/Desktop/List.xml") 
printf '%s\n' "${content%,}" >"https://stackoverflow.com/users/$USER/Desktop/List2.csv" 
+0

ありがとうだろう! 2番目のコマンドは私が本当に必要なものです。私はそんなに愚かな間違いをしていたことに気付かなかった:/ – MingyJ

0

sedの解決のために、

sed ':a;N;$!ba;y/\n/,/' /users/$USER/Desktop/List2.csv 

を試すか、あなたも、最後の後にコンマたい場合:

sed ':a;N;$!ba;y/\n/,/;s/$/,/' /users/$USER/Desktop/List2.csv 

が、その後、より簡単

cat /users/$USER/Desktop/List2.csv | tr "\n" "," 
+0

ありがとう!それは実際には非常に役立ちます、それは非常にきれいに後ろに削除します:) – MingyJ

関連する問題