В командах и скриптах Bash вы можете использовать строки из различных файлов. К примеру, для составления команды берётся одна строка из первого файла и вторая строка из второго файла. В скрипте мы объединяем эти строки и ожидаем получить результирующую строку, включающую обе подстроки — это нормальное поведение и обычно так и происходит.
Но бывают странные ситуации, когда значение строк накладывается друг на друга и оно как бы переписывается. То есть если вторая строка длиннее первой, то мы видим только вторую. Если первая строка длиннее второй, то мы видим вторую и окончание первой.
Причиной такого поведение может быть то, что строки содержат специальные управляющие символы, которые возвращают каретку к началу строки и она начинает записываться заново.
Но ещё чаще такое происходит от того, что один или оба файла были созданы в текстовом редакторе Windows.
Решением является конвертация файлов с помощью утилиты dos2unix (пакет для установки называется также):
dos2unix ФАЙЛ1 ФАЙЛ2 ФАЙЛ3
dos2unix — это конвертер форматов текстовых файлов из DOS/Mac в Unix и в обратном направлении.
Пакет Dos2unix включает утилиты «dos2unix» и «unix2dos» для преобразования текстовых файлов в формате DOS или Mac в формат Unix и наоборот.
Использование программ:
dos2unix [ОПЦИИ] [ФАЙЛ ...] [-n ИСХОДНЫЙ НОВЫЙ ...] unix2dos [ОПЦИИ] [ФАЙЛ ...] [-n ИСХОДНЫЙ НОВЫЙ ...]
По умолчанию при использовании команд будет перезаписан существующий файл. Если вы хотите изменить это поведение, то используйте опцию -n, после которой укажите сначала название старого файла, а затем название нового файла. Подстановочные символы использовать нельзя!
В текстовых файлах DOS/Windows разрыв строки, также известный как новая строка, представляет собой комбинацию двух символов: возврата каретки (CR), за которым следует перевод строки (LF). В текстовых файлах Unix разрыв строки — это один символ: перевод строки (LF). В текстовых файлах Mac до Mac OS X разрыв строки состоял из одного символа возврата каретки (CR). В настоящее время Mac OS использует разрывы строк в стиле Unix (LF).
Помимо разрывов строк, Dos2unix также может преобразовывать кодировку файлов. Некоторые кодовые страницы DOS могут быть преобразованы в Unix Latin-1. А файлы Windows Unicode (UTF-16) можно преобразовать в файлы Unix Unicode (UTF-8).
Двоичные файлы автоматически пропускаются, если преобразование не принудительно.
Необычные файлы, такие как каталоги и FIFO, автоматически пропускаются.
Символические ссылки и их цели по умолчанию остаются нетронутыми. Символические ссылки можно при желании заменить, или вывод может быть записан в цель символической ссылки. Запись в цель символической ссылки не поддерживается в Windows.
С помощью опции -i вы можете оказать информацию о файле, при этом преобразование не производится. Вы можете использовать опцию -i без флагов и тогда будет показана вся возможная информация, или можете ограничить вывод одним из аспектов.
Пример команды для показа информации о всех файлах в текущей директории:
dos2unix -i *
Следующая информация печатается в указанном порядке: количество разрывов строк DOS, количество разрывов строк Unix, количество разрывов строк Mac, метка порядка байтов, текстовая или двоичная, имя файла.
Пример вывода:
6 0 0 no_bom text dos.txt 0 6 0 no_bom text unix.txt 0 0 6 no_bom text mac.txt 6 6 6 no_bom text mixed.txt 50 0 0 UTF-16LE text utf16le.txt 0 50 0 no_bom text utf8unix.txt 50 0 0 UTF-8 text utf8dos.txt 2 418 219 no_bom binary dos2unix.exe
Обратите внимание, что иногда двоичный файл можно принять за текстовый файл. Смотрите также параметр "-s".
При желании можно установить дополнительные флаги для изменения вывода. Можно добавить один или несколько флагов.
Список всех опций и их описание:
man dos2unix
Связанные статьи:
- Что делать, если в Linux не видны некоторые символы Unicode (РЕШЕНО) (54.9%)
- Как из текстового файла найти и удалить символы, отличные от UTF-8 (54.9%)
- Основы использования Joe's Own Editor (52%)
- Как преобразовать PDF в JPG с помощью командной строки в Linux (РЕШЕНО) (52%)
- Как конвертировать JPG в PDF (52%)
- Как сделать брошюру в LibreOffice (RANDOM - 28.4%)