Я пытаюсь написать регулярное выражение, чтобы удалить все, что начинается с «[» и заканчивается на «m» или «;» так что следующий скрипт будет очищен от всех специальных символов:
Script started on 2023-09-16 10:06:45-04:00 [TERM = "xterm-256color" TTY = "/dev/pts/1" COLUMNS = "204" LINES = "55"]
^[[?2004h^[]0;matt@SERENITY: ~^G^[[01;32mmatt@SERENITY^[[00m:^[~^[[00m$ ls^M
^[[?2004l^M^[[0m^[Desktop^[[0m ^[[01;34mDocuments^[[0m ^[[01;34mDownloads^[[0m ^[[01;34mmarkdown^[[0m ^[[01;34mMusic^[[0m ^[[01;34mnotes^[[0m ^[[01;34mPictures^[[0m ^[[01;34mPublic^[[0m ^[[01;34mscripts^[[0m ^[[01;34msnap^[[0m ^[[01;34mTemplates^[[0m typescript ^[[01;34mVideos^[[0m^M
^[[?2004h^[]0;matt@SERENITY: ~^G^[[01;32mmatt@SERENITY^[[00m:^[~^[[00m$ ls^M
^[[?2004l^M^[[0m^[Desktop^[[0m ^[[01;34mDocuments^[[0m ^[[01;34mDownloads^[[0m ^[[01;34mmarkdown^[[0m ^[[01;34mMusic^[[0m ^[[01;34mnotes^[[0m ^[[01;34mPictures^[[0m ^[[01;34mPublic^[[0m ^[[01;34mscripts^[[0m ^[[01;34msnap^[[0m ^[[01;34mTemplates^[[0m typescript ^[[01;34mVideos^[[0m^M
^[[?2004h^[]0;matt@SERENITY: ~^G^[[01;32mmatt@SERENITY^[[00m:^[~^[[00m$ ls^M
^[[?2004l^M^[[0m^[Desktop^[[0m ^[[01;34mDocuments^[[0m ^[[01;34mDownloads^[[0m ^[[01;34mmarkdown^[[0m ^[[01;34mMusic^[[0m ^[[01;34mnotes^[[0m ^[[01;34mPictures^[[0m ^[[01;34mPublic^[[0m ^[[01;34mscripts^[[0m ^[[01;34msnap^[[0m ^[[01;34mTemplates^[[0m typescript ^[[01;34mVideos^[[0m^M
^[[?2004h^[]0;matt@SERENITY: ~^G^[[01;32mmatt@SERENITY^[[00m:^[~^[[00m$ exit^M
^[[?2004l^Mexit^M
Script done on 2023-09-16 10:06:49-04:00 [COMMAND_EXIT_CODE = "0"]
на данный момент моя команда выглядит примерно так:
%s:/^M\|^G\|^[//g | %s/\[01;34m//g | %s/\[01;32m//g
и хотя я все еще работаю над этим, он удаляет хороший кусок, но он довольно повторяется, что противоречит цели регулярного выражения
Кто-нибудь знает более быстрый способ удалить каждую подстроку, которая начинается с «[» и заканчивается на «m» или «;»?
Вывод должен выглядеть так:
Script started on 2023-09-16 10:06:45-04:00 [TERM = "xterm-256color" TTY = "/dev/pts/1" COLUMNS = "204" LINES = "55"]
matt@SERENITY: ~matt@SERENITY:~$ ls
Desktop Documents Downloads markdown Music notes Pictures Public scripts snap Templates typescript Videos
matt@SERENITY: ~matt@SERENITY:~$ ls
Desktop Documents Downloads markdown Music notes Pictures Public scripts snap Templates typescript Videos
matt@SERENITY: ~matt@SERENITY:~$ ls
Desktop Documents Downloads markdown Music notes Pictures Public scripts snap Templates typescript Videos
matt@SERENITY: ~matt@SERENITY:~$ exit
exit
Script done on 2023-09-16 10:06:49-04:00 [COMMAND_EXIT_CODE = "0"]
Покажите, пожалуйста, каким должен стать ваш образец текста.
Пытались ли вы настроить свой терминал/среду/команды таким образом, чтобы вообще не создавать escape-последовательности ANSI?
У меня нет, есть ли у вас ресурс или ссылка на это?





Это должно удалить все коды ANSI, при условии, что вы правильно создали коды ( escape-символ является буквальным, а не его печатным представлением ^[):
%s/\e\[[0-9;?]*[a-zA-Z]
То же самое можно сделать с помощью sed:
sed 's,\x1B\[[0-9;?]*[a-zA-Z],,g'
Отлично, после добавления '?' результат будет выглядеть так: ]0;matt@SERENITY: ~matt@SERENITY:~$ ls Desktop Документы Загрузки уценка Музыкальные ноты Картинки Публичные скрипты snap Шаблоны машинописный текст Видео ]0;matt@SERENITY: ~ matt@SERENITY:~$ ls Настольные документы Загрузки уценки Музыкальные ноты Картинки Публичные скрипты snap Шаблоны машинописного текста Видео ]0;matt@SERENITY: ~matt@SERENITY:~$ ls Настольные документы Загрузки уценки Музыкальные ноты Картинки Публичные скрипты snap Шаблоны машинописного текста Видео ]0 ;matt@SERENITY: ~matt@SERENITY:~$ выход выход, все еще ']0m;' левый
Почему-то регулярное выражение не уловило ']0m;'
да, я так и понял, конечный результат удаления всего ненужного был: %s/\e[[0-9;?]*[a-zA-Z] | %s/]0m;//g | %s/^M\|^G\|^[//g
Кстати, не могли бы вы подтвердить мое понимание следующей строки: [0-9;?]*[a-zA-Z] включает ли она все символы в диапазоне [0-9;?] до любого символа алфавита, и в этом случае он также будет включать этот альфа-символ?
Да, и да, он также будет включать последний альфа-символ.
Пожалуйста, добавьте образец входных данных (без описаний, изображений и ссылок) и желаемый результат для этого образца входных данных к вашему вопросу (без комментариев).