Кошка с новой линией - PullRequest
       11

Кошка с новой линией

2 голосов
/ 17 марта 2010

Содержание моего входного файла

Добро пожаловать

Welcome1

welcome2

Мой скрипт

for groupline in `cat file`
do
        echo $groupline;
done

Я получил следующий вывод.

welcome
welcome1
welcome2 

Почему не печатается пустая строка. Я хочу причину.

Ответы [ 4 ]

4 голосов
/ 17 марта 2010

вам нужно установить IFS на новую строку \n

IFS=$"\n"
for groupline in $(cat file)
do
        echo "$groupline";
done

Или поставить двойные кавычки. См. здесь для объяснения

for groupline in "$(cat file)"
do
        echo "$groupline";
done

без вмешательства в IFS, «правильный» способ - использовать цикл чтения

while read -r line
do
 echo "$line"
done <"file"
1 голос
/ 17 марта 2010

Потому что вы все делаете неправильно. Вы хотите while не for, а хотите read, а не cat:

while read groupline
do
  echo "$groupline"
done < file
0 голосов
/ 17 марта 2016

Использование IFS=$"\n" и var=$(cat text.txt) удаляет все символы «n» из вывода echo $var

0 голосов
/ 29 мая 2012

Решение ghostdog74, предоставленное , полезно, но имеет недостаток.

IFS не может использовать двойные кавычки (по крайней мере, в Mac OS X), но может использовать одинарные кавычки, например:

IFS=$'\n'

Это хорошо, но не совместимо с тире, может быть, это и лучше:

IFS='
'

Пустая строка будет съедена в следующей программе:

IFS='
'
for line in $(cat file)
do
        echo "$line"
done

Но вы не можете добавлять двойные кавычки вокруг $(cat file), он будет обрабатывать весь файл как одну строку.

for line in "$(cat file)"

Если вы хотите обработать пустую строку, используйте следующую команду:

while read line
do
    echo "$line"
done < file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...