2016-11-21 86 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) 

如果我贊同這個變量,我得到一個輸出看起來像這樣:

123, 
124, 
125, 

我需要什麼是消除這些空間,使輸出的樣子123124125幫助沒有領先的空間。我嘗試了多種解決方案,但無法工作。任何幫助將是驚人的!

回答

4

如果您不想換行符,請不要讓xmlstarlet將它們放在第一位。

也就是說,改變-n-o ,把一個逗號分隔每個值之後,而不是一個新行:

{ 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" 

printf '\n'這裏提出一個最終的換行符在CSV文件結束後xmlstarlet已經寫完了輸出。

如果你不想後,這留下的輸出文件呢,要擺脫它的最簡單的方法是閱讀的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

謝謝!第二個命令是我真正需要的。我沒有意識到我犯了這樣一個愚蠢的錯誤:/ – 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