如何从ant脚本连接文件的所有行?

时间:2014-01-20 21:29:14

标签: bash ant

我有一个以下格式的文本文件:

cat yourfile.txt
a
b
c
d
e
f
g

我想将其转换为:

A,B,C,d,E,F,G

这是我现在提出的解决方案:

while read line; do printf "%s%s" $line "," ; done < yourfile.txt
a,b,c,d,e,f,g,

两个问题:

  • 我最后得到一个额外的逗号(,)
  • 我知道我可以在shell脚本中运行此命令,并从我的build.xml执行shell脚本。还是有更优雅的解决方案?

3 个答案:

答案 0 :(得分:2)

您可以使用sed

$ sed ':a;N;$!ba;s/\n/,/g' test.txt 
a,b,c,d,e,f,g

请参阅this answer以了解更多详情。

否则,对于其他解决方案,删除最终逗号非常容易。例如sed

$ cat test.txt|tr "\n" ","|sed "s/,$//g" 
a,b,c,d,e,f,g
$ while read line; do printf "%s%s" $line "," ; done < test.txt|sed "s/,$//g" # with your solution
a,b,c,d,e,f,g

答案 1 :(得分:2)

只需使用tr命令

即可
> string=$(tr $'\n' ',' < "yourfile.txt"); echo "${string%,*}"
a,b,c,d,e,f,g

使用bash替换删除尾随逗号。

答案 2 :(得分:2)

“one”-liner利用IFS变量和数组:

str=$( IFS=$'\n'; arr=( $(<test.txt) ); IFS=,; echo "${arr[*]}" )

首先,使用换行符作为字段将整个文件读入数组 拆分器确保每个元素一行。接下来,更改字段分隔符 逗号,以便将整个数组连接成一个以逗号分隔的字符串。