我在 bash 中有一个函数,可以将一堆行输出到标准输出。我想将它们组合成一行,它们之间有一些分隔符。
前:
one
two
three
后:
one:two:three
有什么简单的方法可以做到这一点?
采用paste
$ echo -e 'one\ntwo\nthree' | paste -s -d':'
one:two:three
另一种方式:
cat file | tr -s "\n" ":"
这可能对您有用:
paste -sd':' file
逐字记录@glennJackman 的更正
awk '{printf("%s%s", sep, $0); sep=":"} END {print ""}' file
或者如您指定的 bash
while read line ; do printf "%s:" $line ; done < file | sed s'/:$//'
我希望这有帮助
为了好玩,这是一种仅限 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
输入.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";
将脚本运行为:
$> perl 虚拟.pl | sed 's/ /:/g' > 输出.txt
输出.txt
一二三