2016-11-21 47 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