从Bash中的变量中删除前导空格

时间:2016-11-21 18:13:06

标签: bash sed spaces

我有一个脚本可以将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,没有前导空格。我尝试过多种无法解决的解决方案。任何帮助都会很棒!

2 个答案:

答案 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" ","