LINUX.ORG.RU
ФорумAdmin

bash - правильно распознать перенос строки


0

0

есть текстовый файл file.txt набранный в windows xp:
line1
line2
line3


результат скрипта
# cat file.txt |while read -r line; do echo "$line"; done
line1
line2
line3

а результат скрипта
#cat file.txt |while read -r line; do rm "$line"; done

cannot remove 'line1\r':No such file or directory
cannot remove 'line2\r':No such file or directory
cannot remove 'line3\r':No such file or directory

Откуда берется "\r", и как с этим бороться?
А если file.txt набрать в linux - ошибка не появляется...


imho, проще этот файл через dos2unix сначала пропустить, чтобы убрать вендовые переносы строк. Хотя, конечно, можно придумать что-то и на bash.

TuxR ★★★★
()
Ответ на: комментарий от evi9

Автор, это известная тема, в винде перенос строки это "\r\n", в линуксе "\n". Т.к. "\r" это непечатный байт (0D), то ты его просто не видишь :) "\n" это 0A байт.

Bers666 ★★★★★
()
Ответ на: комментарий от shell-script

tr можно и после cat засунуть. И так будет лучше, потому что у тебя программа обломается при наличии пробелов в имени файла (ну или ещё двойные кавычки поставить вокруг `echo | tr`).

gaa ★★
()
Ответ на: комментарий от gaa

Это уже на усмотрение топикстартера. Я сам принцип действия показал.

shell-script ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.