BASH - 从文本文件中读取多行

时间:2012-04-18 14:41:56

标签: bash text concatenation

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

6 个答案:

答案 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

参见例如tldp section on arrays