我们有以下文件(这是示例)
more machines.txt
Node23
Node34
Node12
Node95
Node23
我们想要将所有节点的列表插入到变量中,并用“,”分隔符连接每个节点
预期结果示例(没有空格)
Node23,Node34,Node12,Node95,Node23
我们试试这个
LIST=` sed -e 's/\s\+/,/g' machines.txt `
但是我们这种方法没有加入机器之间的分隔符,我们得到
echo $LIST
Node23 Node34 Node12 Node95 Node23
在变量中获取 csv 列表的正确方法是什么(此语法应该在 bash 脚本中)
答案1
和paste
:
list=$(paste -sd, < machines.txt)
答案2
该sed
命令默认逐行计算。因此,您的命令不会替换换行符。您可以通过运行以下命令来确认这一点:
echo "$LIST"
这将表明您实际上没有对原始文件内容进行任何操作。
由于您只替换一个字符,我建议使用该tr
工具作为sed
.结果命令看起来像这样:
LIST=$(tr '\n' ',' < machines.txt)
基本上,该行意味着我们要用\n
逗号替换换行符,
如果有尾随逗号,您还可以添加sed
命令来删除最后一个逗号。
LIST=$(tr '\n' ',' < machines.txt | sed 's/,$//')
答案3
我的做法:
$ LIST=$(echo $(<machines.txt) | sed 's/ /,/g')
$ echo "$LIST"
$ Node23,Node34,Node12,Node95,Node23