Табуляция хранит переход к следующей позиции табуляции, а не фиксированное число видимых пробелов. Её отображаемая ширина зависит от текущего столбца и настройки позиций. Команды expand и unexpand преобразуют символы табуляции и пробелы друг в друга с учётом этих позиций.
Text-Fu · Урок 10
expand и unexpand
Узнайте, как позиции табуляции управляют преобразованием между табуляциями и пробелами с помощью expand и unexpand.
Преобразование табуляций в пробелы
expand читает ввод, заменяет табуляции числом пробелов, необходимым для достижения нужной позиции, и записывает результат в stdout:
$ expand sample.txt
По умолчанию позиции табуляции располагаются через каждые 8 столбцов. Поэтому табуляция в столбце 1 раскрывается иначе, чем в столбце 6; она не всегда заменяется восемью пробелами.
Как expand заменяет символ табуляции с настройками по умолчанию?
Выбор позиций табуляции
Используйте -t NUMBER, чтобы разместить позиции табуляции через заданное число столбцов. Для интервала в четыре столбца:
$ expand -t 4 sample.txt
GNU expand также принимает разделённый запятыми список явных позиций. Используйте -i, если нужно преобразовывать только табуляции перед первым непробельным символом каждой строки.
Какая команда преобразует табуляции с позициями через каждые четыре столбца?
Безопасное сохранение преобразованного вывода
expand не редактирует входной файл. Чтобы сохранить преобразованный текст, перенаправьте stdout в другой путь:
$ expand sample.txt > result.txt
Не используйте expand sample.txt > sample.txt. Оболочка усекает файл назначения до того, как expand успевает его прочитать, поэтому исходные данные могут быть потеряны. Проверив отдельно записанный результат, можно намеренно заменить оригинал подходящей операцией управления файлами.
Какая команда сохраняет раскрытый текст, не усекая sample.txt до чтения?
Преобразование пробелов в табуляции
unexpand заменяет подходящие пробелы табуляциями, сохраняя выравнивание по выбранным позициям. По умолчанию GNU unexpand преобразует только начальные пробельные символы перед первым непробельным символом строки:
$ unexpand result.txt
Используйте -a, чтобы рассматривать подходящие пробельные символы по всей строке:
$ unexpand -a result.txt
Команда не просто заменяет каждую последовательность из восьми пробелов. Преобразование зависит от столбцов и позиций табуляции, как и у expand. Если файл использует другое соглашение, задайте его через -t 4 или иную спецификацию позиций.
Какие пробелы GNU unexpand обычно рассматривает без -a?
Какой параметр предписывает GNU unexpand рассматривать также пробелы после первого непробельного символа?
Обе команды читают stdin, если файл не указан, поэтому их можно использовать в конвейерах. Помните: преобразование в пробелы и обратно может не восстановить исходный выбор табуляций и пробелов, даже если видимое выравнивание не изменилось.
Урок завершён
Вы завершили expand и unexpand
Теперь вы можете преобразовывать табуляции и пробелы, сохраняя выравнивание по позициям табуляции.
Раскрывайте табуляции до следующей настроенной позиции.
Задавайте собственные позиции параметром
-t.Сохраняйте вывод в другой файл перед заменой входного.
По умолчанию преобразовывайте начальные пробелы командой
unexpand.Используйте
-a, когда нужно рассматривать пробелы по всей строке.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт