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