URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 86064
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Определение типа окончания строк (W..."

Отправлено auto_tips , 19-Авг-12 22:54 
Ситуация: небольшой Web-проект разрабатывается несколькими людьми на разных ОС: Windows и Linux. В результате в некоторых файлах перевод строк сделан в стиле Windows, в некоторых - в стиле Unix. Неудобство состоит в том, что если какая-то "интеллектуальная" программа поменяет тип перевода строк, система контроля версий Subversion помечает все строки как изменившиеся, и нужны дополнительные усилия чтобы определить реальные изменения. Поэтому было принято решение определить тип перевода строк в каждом файле, и применить соответствующие меры (например, использовать атрибут svn:eol-style в subversion).

Скрипт простой, легко кастомизируется под автоматическую конвертацию (с помощью dos2unix), другие типы файлов, определение стиля Macintosh (в данном случае различается только Windows и Unix):

   for FILE in `find -iname '*.php' -or -iname '*.css' -or -iname '*.js' -or -iname '*.txt' -or -iname '*.xml'` ; do
      echo -n "$FILE ... " ;
      WIN=`grep -P "\r$" $FILE | head`;
      if [ -z "$WIN" ] ; then
         echo "Unix"
      else
         echo "Windows"
      fi
   done

URL:
Обсуждается: https://www.opennet.ru/tips/info/2709.shtml


Содержание

Сообщения в этом обсуждении
"Определение типа окончания строк (Windows или Unix) для текстовых файлов в небольшом Web-проекте"
Отправлено Карбофос , 19-Авг-12 22:54 
хорошо бы ещё автодетектировать два utf-8  глюкобайта от виндов в начале текстовиков :)

"Определение типа окончания строк (Windows или Unix) для текстовых файлов в небольшом Web-проекте"
Отправлено pavlinux , 20-Авг-12 03:07 


TEXT CONVERSION AND SUBSTITUTION:

# IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
sed 's/.$//'               # assumes that all lines end with CR/LF
sed 's/^M$//'              # in bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//'            # works on ssed, gsed 3.02.80 or higher

# IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed "s/$/`echo -e \\\r`/"            # command line under ksh
sed 's/$'"/`echo \\\r`/"             # command line under bash
sed "s/$/`echo \\\r`/"               # command line under zsh
sed 's/$/\r/'                        # gsed 3.02.80 or higher

# IN DOS ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed "s/$//"                          # method 1
sed -n p                             # method 2

# IN DOS ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
# Can only be done with UnxUtils sed, version 4.0.7 or higher. The
# UnxUtils version can be identified by the custom "--text" switch
# which appears when you use the "--help" switch. Otherwise, changing
# DOS newlines to Unix newlines cannot be done with sed in a DOS
# environment. Use "tr" instead.
sed "s/\r//" infile >outfile         # UnxUtils sed v4.0.7 or higher
tr -d \r <infile >outfile            # GNU tr version 1.22 or higher


http://sed.sourceforge.net/sed1line.txt

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено Crazy Alex , 21-Авг-12 02:17 
Блин, тут все невесть чем читают... Написано же - им не преобразовывать, а распознавать.

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено pavlinux , 21-Авг-12 03:00 
Конвертнуть все в один формат, и нефига распознавать. :)

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено pavlinux , 21-Авг-12 03:00 
.

"Определение типа окончания строк (Windows или Unix) для текстовых файлов в небольшом Web-проекте"
Отправлено Nas_tradamus , 20-Авг-12 11:20 
man grep

-P, --perl-regexp
              Interpret PATTERN as a Perl regular expression.  This option  is
              not supported in FreeBSD.


"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено Crazy Alex , 20-Авг-12 13:47 
ну так они его и использовали

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено V , 20-Авг-12 15:43 
он к тому, что на BSD не работает

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено Crazy Alex , 21-Авг-12 02:16 
А, человек читать не умеет... В первой строке написано - Windows и Linux. При чём здесь фря?

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено Nas_tradamus , 21-Авг-12 09:57 
> А, человек читать не умеет... В первой строке написано - Windows и
> Linux. При чём здесь фря?

Я намекаю, что бывают часто ситуации: проект разрабатывается на Windows и Linux (очень частое явление), но КРУТИТСЯ под FreeBSD (что тоже бывает - см. хостинги под ISPmanager/VDSmanager).


"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено ананим , 21-Авг-12 12:59 
А следующее предложение намекает что у них разработка на винде и линухе с свн.
Что говорит о том, что на хостинг уже не влияет.

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено futu , 27-Авг-12 20:29 
в скрипте Unix. а не Linux.

"Определение типа окончания строк (Windows или Unix) для текс..."
Отправлено Crazy Alex , 06-Сен-12 15:27 
угу. Только относится это к типам окончания строк, а не к тому, на чем скрипт крутится.