Предлагаемые дополнительные «классы символов» POSIX

Предположим, что это делается с помощью \r, которая возвращает курсор в начало текущей строки, не переходя на следующую строку, и что рассматриваемая программа отправляет свой вывод на стандартный вывод, преобразовывая все \rсимволов в выводе программы на \nдаст результат, который вам нужен:

yourprogram | tr '\r' '\n' > logfile

См. разницу между

printf "Hello\rworld\n"

и

printf "Hello\rworld\n" | tr '\r' '\n'

Обратите внимание, что без этого перенаправление в файл журнала будет сохранять все выходные данные в файле; вы сможете увидеть это, просмотрев файл с помощью less, а не cat.(less отобразит \rкак ^Mбез перезаписи предыдущей строки.)

Если программа пишет напрямую в терминал, это не поможет. В этом случае вам также понадобится программа, способная перехватывать все выходные данные терминала; один примерscript:

script -c yourprogram logfile

запустит программу и запишет весь ее вывод в logfile. Вам нужно будет обработать специальные символы в лог-файле, чтобы понять это — lessпоможет вам в этом (или любой разумный редактор ).

-3
07.03.2020, 18:06
2 ответа

Who should be contacted to get this idea implemented in some utilities (grep,sed,bash maybe)?

Уже существует некоторый уровень поддержки, например, в системах, использующих библиотеку GNU C и ее определения локалей, «é» распознается как нижний -регистр во французских локалях, а «α» распознается как нижний -. ] случай в греческих локалях. Фарси, как определено в библиотеке GNU C, использует ۰۱۲۳۴۵۶۷۸۹ при некоторых обстоятельствах (, в частности, scanfи printfс модификатором I), но они не являются частью класс «цифры», и я полагаю, что Sharif FarsiWeb знает, что они делают в этом отношении.

Предлагать изменения такого типа в настоящее время немного сложно. Вы всегда можете присоединиться к Austin Group и обсудить это там, либо через список рассылки или средство отслеживания ошибок (, в идеале, начните с того, что некоторое время понаблюдайте за рассылкой. список или чтение архивов ); но POSIX не совсем подходит для того, чтобы пытаться управлять изменениями без каких-либо существующих реализаций. Вы можете попытаться предложить изменение разработчикам различных задействованных инструментов, предположительно начав с определения локали в той или иной библиотеке C, но вы вряд ли продвинетесь слишком далеко без какого-либо неотложного дела (, как правило, требования стандарта. ), поэтому вы попадаете в ситуацию, похожую на -22.

В настоящее время я думаю, что лучше всего придумать обоснованный вариант использования -для важного клиента одного из крупных редакторов операционных систем и таким образом добиться внесения изменений. Тогда редактор возьмет на себя все препирательства сообщества -за вас.

2
28.04.2021, 23:21

Эта проблема уже решена в POSIX с использованием функций широких -символов. Начните с<wctype.h>и <wchar.h>, которые работают с текущим языковым стандартом и<locale.h>для указания того, какой языковой стандарт может быть.

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

2
28.04.2021, 23:21

Теги

Похожие вопросы