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の複数の行を1つの長い文字列として連結する方法はありますか?

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
test=$(cat file.txt | xargs)
echo $test
于 2013-03-12T18:53:03.430 に答える
2

別のもの:

line=$(< file.txt)
line=${line//$'\n'/ }
于 2012-04-18T19:06:34.190 に答える
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

配列を使用する

#!/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 に答える
0

私はそれが最も簡単な方法だと信じています:

text=$(echo $(cat FILE))

ただし、単語間の複数のスペース/タブは保持されません。

于 2012-04-18T14:52:51.757 に答える