Я скопировал эту строку из /proc/some_proc_id/cmdline
моей машины с Ubuntu,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
Каким-то образом символы пробела представлены ^@
в vi. Я попытался заменить их пробелами, используя команду,
:%s#^@# #g
Но это говорит pattern not found ^@
.
Как можно заменить специальные символы, особенно те, которые начинаются с символа карата?
vi
special-characters
Жиль "ТАК - перестань быть злым"
источник
источник
TERM
и много раз, этоscreen
TERM
правильно ли установлена переменная окружения?Ответы:
Это не
vi
то, что сделал это. Хотя вы вводите командные строки в оболочках с пробелами между аргументами, командные строки на самом деле являются внутренними дискретными последовательностями строк, а не одной длинной строкой, разделенной пробелами. Оболочка разделяла командную строку на отдельные строки аргументов до запуска команды.В C строки заканчиваются символами NUL, и они отображаются как
^@
.Для того, чтобы ввести эти символы, вы должны поставить перед ними префикс Control - vдля буквального следующего символа.
Например, в этом случае: Control- с vпоследующимControl - @.
Специальный символ, который вводит буквально следующие символы, обычно Control- vно это на самом деле настраивается. Тип,
stty -a
чтобы узнать, что он установлен. Ищитеlnext
в выходных.источник
:%s#^@##g
. Поскольку я копирую, вставляю из терминала, vi вставляет их как оригинальные символы ...^letter
это просто визуальная запись для этого, никакой реальной каретой не занимается. И да, вы должны экранировать управляющий символ, Ctrl-V - это то, как вы делаете это с клавиатуры. Это работает почти везде. К вашему сведению, другой ответ содержит альтернативу, специфичную дляvi
командной строки, чтобы вообще не вводить управляющий символ.^@
и вы скопировали ее, затем используйте\^@
для представления этой двухсимвольной строки в vi. Многие программы используют обратную косую черту в значении «интерпретировать следующий символ буквально вместо использования его специальной функции».Тот символ представляет собой символ NULL со значением ASCII 000.
Вы можете попробовать:
Альтернатива:
На клавиатуре, где символ @ находится сверху 2клавиши (спасибо Celada), вы можете сделать:
%s/<CTRL-2>/ /g
(на ПК)%s/<CTRL-SHIFT-2>/ /g
(на Mac)где
<CTRL-2>
означает сначала нажать CTRLна ПК, удерживая его нажатым, нажать 2, отпустить CTRL.и
<CTRL-SHIFT-2>
означает сначала нажать controlна Mac, удерживая его нажатым, нажать shiftна Mac, удерживая его нажатым, нажать 2, отпустить controlи shift.Наконец, обе команды должны появиться
%s/^@/ /g
на экране.^@
означает один символ,^
за которым не следует@
, поэтому вы не можете просто набрать^
и@
подряд в приведенной выше команде.Эта команда заменяет все
^@
символы пробела.( Источник )
источник
@
находится сверху2
клавиши.sed 's / \ r //' input> output
введите описание ссылки здесь
источник