将字符串/单词插入文件中的变量并连接分隔符而不是空格

将字符串/单词插入文件中的变量并连接分隔符而不是空格

我们有以下文件(这是示例)

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

相关内容