3

我正在尝试读取一个文本文件,比如 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 中的多行连接为一个长字符串?

4

6 回答 6

5

您可以将\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' ' ')
于 2012-04-18T14:48:55.247 回答
2

另一个:

line=$(< file.txt)
line=${line//$'\n'/ }
于 2012-04-18T19:06:34.190 回答
2
test=$(cat file.txt | xargs)
echo $test
于 2013-03-12T18:53:03.430 回答
1

您必须将下一行的内容附加到您的变量中:

while read line
do
    test="${test} ${LINE}"
done < file.txt

echo $test

响应。更简单的是,您可以一次将完整文件读入变量:

test=$(cat file.txt)

分别

test=$(tr "\n" " " < file.txt)

如果您想保留换行符,它会很简单:

test=<file.txt
于 2012-04-18T14:49:00.333 回答
0

我相信这是最简单的方法:

text=$(echo $(cat FILE))

但它不会在单词之间保留多个空格/制表符。

于 2012-04-18T14:52:51.757 回答
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

参见例如关于数组的 tldp 部分

于 2012-04-18T14:55:26.587 回答