Подтвердить что ты не робот

Как определить окончание строки файла

У меня есть куча (сотни) файлов, которые должны иметь окончание строк Unix. Я сильно подозреваю, что некоторые из них имеют окончание строк Windows, и я хочу программно выяснить, какие из них делать.

Я знаю, что могу просто запустить

flip -u
или что-то подобное в script для преобразования всего, но я хочу, чтобы иметь возможность идентифицировать те файлы, которые нужно изменить в первую очередь.
4b9b3361

Ответ 1

Вы можете использовать grep

egrep -l $'\r'\$ *

Ответ 2

Вы можете использовать инструмент file, в котором указывается тип окончания строки. Или вы можете просто использовать dos2unix -U, который преобразует все в конец строки Unix, независимо от того, с чего он начинался.

Ответ 3

Что-то по строкам:

perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME

хотя некоторые из этих регулярных выражений могут нуждаться в очистке и уборке.

Это будет выводить ваш файл с WIN, MAC или UNIX в конце каждой строки. Хорошо, если ваш файл как-то ужасный беспорядок (или diff) и имеет смешанные окончания.

Ответ 4

Вот самый безотказный ответ. Ответы Stimms не учитывают подкаталоги и двоичные файлы

find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }'
  • Используйте file для поиска типа файла. Те, у кого CRLF, имеют обратные символы Windows. Вывод file разделяется символом :, а первое поле - это путь к файлу.

Ответ 5

Unix использует один байт, 0x0A (LineFeed), а окна используют два байта, 0x0D 0x0A (возврат каретки, подача строки).

Если вы никогда не видите 0x0D, то это, скорее всего, Unix. Если вы видите пары 0x0D 0x0A, это, скорее всего, MSDOS.

Ответ 6

Windows использует char 13 и 10 для окончания строки, unix только один из них (я не помню, какой из них). Таким образом, вы можете заменить char 13 и 10 на char 13 или 10 (тот, который использует unix).

Ответ 7

Когда вы знаете, какие файлы имеют окончания строки Windows (0x0D 0x0A или \r \n), что вы будете делать с этими файлами? Я полагаю, вы преобразуете их в конец строки Unix (0x0A или \n). Вы можете конвертировать файл с окончанием строки Windows в конец строки Unix с помощью утилиты sed, просто используйте команду:

$> sed -i 's/\r//' my_file_with_win_line_endings.txt

Вы можете поместить его в script следующим образом:

#!/bin/bash

function travers()
{
    for file in $(ls); do
        if [ -f "${file}" ]; then
            sed -i 's/\r//' "${file}"
        elif [ -d "${file}" ]; then
            cd "${file}"
            travers
            cd ..
        fi
    done
}

travers

Если вы запустите его из корневого каталога с файлами, в конце вы убедитесь, что все файлы с окончанием строки Unix.