如何将行连接成一个字符串

时间:2012-04-24 18:11:11

标签: bash shell

我在bash中有一个函数,它向stdout输出一串行。我想把它们组合成一行,它们之间有一些分隔符。

之前:

one 
two 
three 

之后:

one:two:three   

这是一种简单的方法吗?

6 个答案:

答案 0 :(得分:11)

使用paste

$ echo -e 'one\ntwo\nthree' | paste -s -d':'
one:two:three

答案 1 :(得分:4)

另一种方式:

cat file | tr -s "\n" ":"

答案 2 :(得分:2)

这可能对您有用:

paste -sd':' file

答案 3 :(得分:1)

逐字记录@ glennJackman的更正

awk '{printf("%s%s", sep, $0); sep=":"} END {print ""}' file

或者您指定bash

while read line ; do printf "%s:" $line ; done < file | sed s'/:$//'

我希望这会有所帮助

答案 4 :(得分:1)

为了好玩,这是一种仅限bash的方式:

echo $'one\n2 and 3\nfour' | { mapfile -t lines; IFS=:; echo "${lines[*]}"; }

输出

one:2 and 3:four

{}分组是为了确保引用数组变量的所有命令都在同一个子shell中执行。一旦管道结束,该变量将不存在。

http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile-140

答案 5 :(得分:0)

INPUT.TXT

one
two
three

Perl解决方案:dummy.pl

 @a = `cat /home/Input.txt`;
    foreach my $x (@a)
    {
            chomp($x);
            push(@array,"$x");
    }
    chomp(@array);
    print "@array";

将脚本运行为:

  

$&GT; perl dummy.pl | sed's / /:/ g'&gt; output.txt的

Output.txt的

  

一个:2:3