我有一个脚本可以将XML文件导出到我的桌面,然后提取“id”标签中的所有数据并将其导出到csv文件。
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,
等。
我需要帮助的是删除这些空格,使输出看起来像123,124,125,没有前导空格。我尝试过多种无法解决的解决方案。任何帮助都会很棒!
答案 0 :(得分:4)
如果您不想换行,请不要告诉xmlstarlet
将它们放在首位。
也就是说,将-n
更改为-o ,
以在每个值后面添加逗号而不是换行符:
{ xmlstarlet sel -t -m '//id[1]' -v . -o ',' && printf '\n'; } \
<"/users/$USER/Desktop/List.xml" \
>"/users/$USER/Desktop/List2.csv"
此处printf '\n'
在xmlstarlet完成输出后,会在CSV文件的末尾添加最终换行符。
如果你不想在输出文件中留下尾随,
,最简单的方法是将xmlstarlet
的结果读入变量并在那里操作它:
content=$(xmlstarlet sel -t -m '//id[1]' -v . -o ',' <"/users/$USER/Desktop/List.xml")
printf '%s\n' "${content%,}" >"/users/$USER/Desktop/List2.csv"
答案 1 :(得分: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" ","