Как прочитать всю строку из Bash - PullRequest
8 голосов
/ 27 января 2011

У меня есть файл file.txt с содержимым, подобным

i love this world

I hate stupid managers
I love linux

I have MS

Когда я делаю следующее:

for line in `cat file.txt`; do
echo $line
done

Это дает вывод как

I
love
this
world
I
..
..

Но мне нужен вывод в виде целых строк, как показано ниже - есть мысли?

i love this world

I hate stupid managers
I love linux

I have MS

Ответы [ 5 ]

16 голосов
/ 27 января 2011
while read -r line; do echo "$line"; done < file.txt
6 голосов
/ 27 января 2011

Как отметил @Zac в комментариях, самое простое решение вопроса, который вы публикуете, - просто cat file.txt, поэтому я должен предположить, что происходит что-то более интересное, поэтому я поставил два варианта, которые решают вопрос, как было задано :

Здесь вы можете сделать две вещи: либо вы можете установить IFS (Внутренний разделитель полей) на новую строку и использовать существующий код, либо вы можете использовать команду read или line в цикле while

IFS="
"

или

(while read line ; do
    //do something
 done) < file.txt
1 голос
/ 07 февраля 2011

Я полагаю, что вопрос заключался в том, как читать всю строку за раз. Простой скрипт ниже сделает это. Если вы не укажете имя переменной для «read», она поместит всю строку в переменную $ REPLY.

cat file.txt | во время чтения; сделать эхо $ REPLY; сделано

Dave ..

1 голос
/ 27 января 2011

Вы можете сделать это с помощью read, если файл входит в стандартный ввод.Если вам нужно сделать это в середине скрипта, который уже использует stdin для других целей, вы можете временно переназначить дескриптор файла stdin.

#!/bin/bash
file=$1 

# save stdin to usually unused file descriptor 3
exec 3<&0

# connect the file to stdin
exec 0<"$file"

# read from stdin 
while read -r line
do
    echo "[$line]"
done

# when done, restore stdin
exec 0<&3
0 голосов
/ 27 января 2011

Попробуйте

(while read l; do echo $l; done) < temp.txt

читать: прочитать строку из стандарта введите и разбейте его на поля.

Читает одну строку из стандартного ввода или из файла дескриптор FD если указана опция -u. Строка разбивается на поля как со словом расщепление, и первое слово присваивается первому ИМЯ, второе слово ко второму ИМЯ и т. д. с назначенными оставшимися словами в последнее имя. Только символы, найденные в $ IFS распознается как слово разделители.

...