我正在尝试读取文本文件,例如file.txt,它包含多行。
说file.txt
的输出是
$ cat file.txt
this is line 1
this is line 2
this is line 3
我想将整个输出存储为变量,例如$text
当回显变量$text
时,预期输出为:
this is line 1 this is line 2 this is line 3
我的代码如下
while read line
do
test="${LINE}"
done < file.txt
echo $test
我得到的输出始终只是最后一行。有没有办法将file.txt中的多行连接成一个长字符串?
答案 0 :(得分:3)
您可以将\n
(换行符)翻译为(空格):
$ text=$(tr '\n' ' ' <file.txt)
$ echo $text
this is line 1 this is line 2 this is line 3
如果行以\r\n
结尾,则可以执行以下操作:
$ text=$(tr -d '\r' <file.txt | tr '\n' ' ')
答案 1 :(得分:1)
您必须将下一行的内容附加到您的变量:
while read line
do
test="${test} ${LINE}"
done < file.txt
echo $test
RESP。更简单的是你可以简单地将整个文件一次性读入变量:
test=$(cat file.txt)
RESP。
test=$(tr "\n" " " < file.txt)
如果你想保留换行符,那就简单了:
test=<file.txt
答案 2 :(得分:1)
另一个:
line=$(< file.txt)
line=${line//$'\n'/ }
答案 3 :(得分:1)
test=$(cat file.txt | xargs)
echo $test
答案 4 :(得分:0)
我相信这是最简单的方法:
text=$(echo $(cat FILE))
但它不会在单词之间保留多个空格/制表符。
答案 5 :(得分:0)
使用数组
#!/bin/bash
while read line
do
a=( "${a[@]}" "$line" )
done < file.txt
echo -n "${a[@]}"
输出:
this is line 1 this is line 2 this is line 3