2013-11-14 5 views
0

прочитать файл, как это:петля в Баш оболочки

while read line; do 
    echo "$line" 
done < file.txt 

Иногда я не могу прочитать последнюю строку.
Откройте файл с VIM, а exec «: set list», затем я вижу «$» в конце каждой строки.
Но, когда я EXEC «кошачий file.txt»:

$ cat file.txt 
aa 
bb$ 

последняя строка «бб» и «$» в той же строке.
Я думаю, что это проблема.
Как я могу использовать «пока» для чтения всех строк?
ps: Может ли vim показать новую строку как \ n и вернуться как \ r?

Я новичок, помогите!

+1

http://unix.stackexchange.com/questions/31947/how-to-add-a-newline-to-the-end-of-a-file – tripleee

ответ

3

Путь Vim предупреждает вас в это состояние (отсутствие новой строки (\n) символ в последней строке) находится во время открытия, где [noeol] будет в сообщении.

:edit foo 
"foo" [noeol] 3L, 42C 

Вы также можете проверить позже с помощью

:setlocal eol? 

Чтобы это исправить задним числом (то есть вы не можете изменить источник файла, чтобы избежать создания таких файлов), просто :write файл из Vim; он автоматически вставляет последнюю новую строку.

+0

Спасибо за помощь. Могу ли я исправить это с помощью оболочки? –

+0

Несомненно. Простой 'echo >> file.txt' будет делать. –

+0

@ tripleee дает нам ссылку, содержит лучшее решение. Спасибо всем. –

3

Скорее всего, из-за отсутствия \n с конца строки ИЛИ наличия \r в строке.

Вы можете проверить его с помощью этой команды:

cat -vte file 

Чтобы удалить \r от конечного использования этого СЭД:

sed -i.bak 's/'$'\r''$//' file 
+0

Благодарим за помощь. Я пытаюсь «cat -vte file», в последней строке на выходе нет «$». Поэтому я думаю, что, возможно, последняя строка отсутствует \ n. –

+0

Да, это определенно из-за отсутствия '\ n' от конца последней строки. – anubhava

Смежные вопросы