Если Вы подразумеваете, что дубликаты должны быть удалены из списков разделенных запятой значений слов (где слова являются последовательностями непробелов), то, возможно, что-то как:
$ echo 2,1,1,2,c,1 a,a,a,b,c | perl -M'List::MoreUtils uniq' -lpe '
s/[\S,]+,[\S,]+/join ",", uniq(split",",$&)/ge'
2,1,c a,b,c
Только \ 033
является escape-последовательностью, и он инициирует escape-последовательность вплоть до включения ;
. \ 033] 0;
. Это инициирует строку, которая устанавливает заголовок в строке заголовка терминала, и эта строка заканчивается специальным символом \ 007
.
См. man console_codes
:
It accepts ESC ] (OSC) for the setting of certain resources. In addi‐
tion to the ECMA-48 string terminator (ST), xterm(1) accepts a BEL to
terminate an OSC string. These are a few of the OSC control sequences
recognized by xterm(1):
ESC ] 0 ; txt ST Set icon name and window title to txt.
То, что вы не видите никаких изменений, вероятно, связано с тем, что ваша подсказка устанавливает заголовок в строку заголовка по умолчанию при возврате к подсказке. Попробуйте:
PROMPT_COMMAND= ; printf '\033]0;Hello World!\007'
На самом деле, управляющая последовательность начинается с первого управляющего символа и заканчивается символом \033\007
(ASCII ESC
и ASCII BEL
).
Символ 0
является параметром, соответствующим Ps в описании для xterm, а текст после точки с запятой - Pt:
Ps = 0 -> Change Icon Name and Window Title to Pt.
Ps = 1 -> Change Icon Name to Pt.
Ps = 2 -> Change Window Title to Pt.
И \033]
, и \033\007
являются частями управляющей последовательности, которые могут быть заменены на другие символы. Терминал воспринимает пару байтов как один управляющий символ (так же, как 4 байта \007
воспринимаются printf
как один символ). В разделе Последовательности управления XTerm, раздел Управляющие символы C1 (8-битные) может быть полезен:
ESC \
String Terminator (ST is 0x9c).
ESC ]
Operating System Command (OSC is 0x9d).
для понимания начала раздела Управление операционной системой:
OSC Ps ; Pt ST
OSC Ps ; Pt BEL
Использование BEL
(\007
) для завершения управляющей последовательности является аномалией. Оно не соответствует стандарту (ECMA-48). Элементы управления операционной системы должны начинаться с ESC ]
или 0x9d, а заканчиваться ESC \
или 0x9c.
Давным-давно разработчик(и) xterm добавил управляющую последовательность для установки заголовка. В X11R1 (1987) программа просто считывала последовательность, пока не получала непечатаемый символ. Позже, в X11R4 (1989), кто-то усовершенствовал эту последовательность, завершив ее на символе BEL
. Стандарт существовал дольше, но причина выбора BEL
вместо ST
неизвестна. В конце концов, этот вопрос был решен в конце 1990-х годов, признав любой из них (но сохранив BEL
в качестве альтернативы, поскольку многие пользователи полагались на жестко закодированное поведение с BEL
).