The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Определение типа окончания строк (Windows или Unix) для текстовых файлов в небольшом Web-проекте
Ситуация: небольшой 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
 
19.08.2012 , Автор: Kroz
Ключи: shell, linebreak, subversion, eol / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Системы контроля версий и управления исходными текстами

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Карбофос (ok), 22:54, 19/08/2012 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    хорошо бы ещё автодетектировать два utf-8  глюкобайта от виндов в начале текстовиков :)
     
  • 1.2, pavlinux (ok), 03:07, 20/08/2012 [ответить] [показать ветку] [···]    [к модератору]
  • –1 +/

    [code]
    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
    [/code]
    http://sed.sourceforge.net/sed1line.txt

     
     
  • 2.7, Crazy Alex (ok), 02:17, 21/08/2012 [^] [ответить]    [к модератору]
  • –1 +/
    Блин, тут все невесть чем читают... Написано же - им не преобразовывать, а распознавать.
     
     
  • 3.8, pavlinux (ok), 03:00, 21/08/2012 [^] [ответить]    [к модератору]
  • +/
    Конвертнуть все в один формат, и нефига распознавать. :)
     
  • 3.9, pavlinux (ok), 03:00, 21/08/2012 [^] [ответить]    [к модератору]
  • +/
    .
     
  • 1.3, Nas_tradamus (ok), 11:20, 20/08/2012 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    man grep

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

     
     
  • 2.4, Crazy Alex (ok), 13:47, 20/08/2012 [^] [ответить]    [к модератору]  
  • +/
    ну так они его и использовали
     
     
  • 3.5, V (??), 15:43, 20/08/2012 [^] [ответить]    [к модератору]  
  • +/
    он к тому, что на BSD не работает
     
  • 3.6, Crazy Alex (ok), 02:16, 21/08/2012 [^] [ответить]    [к модератору]  
  • +/
    А, человек читать не умеет... В первой строке написано - Windows и Linux. При чём здесь фря?
     
     
  • 4.10, Nas_tradamus (ok), 09:57, 21/08/2012 [^] [ответить]    [к модератору]  
  • +/
    > А, человек читать не умеет... В первой строке написано - Windows и
    > Linux. При чём здесь фря?

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

     
     
  • 5.11, ананим (?), 12:59, 21/08/2012 [^] [ответить]    [к модератору]  
  • +/
    А следующее предложение намекает что у них разработка на винде и линухе с свн.
    Что говорит о том, что на хостинг уже не влияет.
     
  • 4.12, futu (ok), 20:29, 27/08/2012 [^] [ответить]    [к модератору]  
  • +/
    в скрипте Unix. а не Linux.
     
     
  • 5.13, Crazy Alex (ok), 15:27, 06/09/2012 [^] [ответить]    [к модератору]  
  • +/
    угу. Только относится это к типам окончания строк, а не к тому, на чем скрипт крутится.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor