如何连接Bash中的文件中的所有行?

Yug*_*dle 2 bash shell loops while-loop

我有一个文件csv:

data1,data2,data2
data3,data4,data5
data6,data7,data8
Run Code Online (Sandbox Code Playgroud)

我想将其转换为(包含在变量中):

variable=data1,data2,data2%0D%0Adata3,data4,data5%0D%0Adata6,data7,data8

我的尝试:

data=''
cat csv | while read line
do
data="${data}%0D%0A${line}"
done
echo $data  # Fails, since data remains empty (loop emulates a sub-shell and looses data)
Run Code Online (Sandbox Code Playgroud)

请帮忙..

Mar*_*c B 12

更简单的方法是从文件中删除换行符:

tr '\n' '' < yourfile.txt > concatfile.txt
Run Code Online (Sandbox Code Playgroud)

  • 不“只是为我工作”,但引导我到 `tr -d '\n'` 效果很好:谢谢! (3认同)

And*_*man 5

猛烈地

data=$(
while read line
do
  echo -n "%0D%0A${line}"
done < csv)
Run Code Online (Sandbox Code Playgroud)

在非bash shell中,可以使用`...`代替$(...)。而且,echo -n不幸的是,抑制换行符的并不是完全可移植的,但这同样适用于bash。

  • 仅供参考,`$()是标准的。已经好几年了。如果您想要一个便携式的`echo -n`,请使用`printf`。 (2认同)