我在bash中有一个函数,它向stdout输出一串行。我想把它们组合成一行,它们之间有一些分隔符。
之前:
one
two
three
之后:
one:two:three
这是一种简单的方法吗?
答案 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