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

Remove Leading Spaces from a variable in Bash

我有一个脚本可以将 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,

我需要帮助的是删除那些 space,以便输出看起来像没有前导 space 的 123,124,125。我尝试了多种解决方案,但无法正常工作。任何帮助都会很棒!

如果您不想要换行符,请不要告诉 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"

对于 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" ","