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 - ошибка не появляется...


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

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

TuxR ★★★★ ()

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

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

Bers666 ★★★★★ ()

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

#!/bin/bash
#

CR='\015'
cat file.txt | while read -r line;
do
  rm `echo $line | tr -d $CR`
done

shell-script ★★★★★ ()
Ответ на: Re: bash - правильно распознать перенос строки от shell-script

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

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

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