BASH-чтение нескольких строк из текстового файла



Я пытаюсь прочитать текстовый файл, скажем файл.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


Выход, который я получаю, всегда только последняя строка. Есть ли способ объединить несколько строк в файле?txt как одна длинная строка?

716   6  

6 ответов:

Вы можете перевести \n (новая строка) в (space):

{[0]}

If lines ends with \r\n, Вы можете сделать это:

$ text=$(tr -d '\r' <file.txt | tr '\n' ' ')

К переменной необходимо добавить содержимое следующей строки:

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

echo $test

ОТВ. еще проще вы можете просто прочитать полный файл сразу в переменную:

test=$(cat file.txt)

ОТВ.

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

Если вы хотите сохранить новые строки, это будет так же просто, как:

test=<file.txt

Еще один:

line=$(< file.txt)
line=${line//$'\n'/ }
test=$(cat file.txt | xargs)
echo $test

Я считаю, что это самый простой метод:

text=$(echo $(cat FILE))

Но он не сохраняет несколько пробелов / вкладок между словами.

Использовать массивы

#!/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 о массивах

Comments

    Ничего не найдено.