Copiei esta linha da /proc/some_proc_id/cmdline
minha máquina ubuntu,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
De alguma forma, os caracteres de espaço são representados por ^@
no vi. Tentei substituí-los por caracteres de espaço usando o comando
:%s#^@# #g
Mas diz pattern not found ^@
.
Como substituir caracteres especiais, particularmente aqueles que começam com o símbolo de quilate?
vi
special-characters
Gilles 'SO- parar de ser mau'
fonte
fonte
TERM
e muitas vezes, éscreen
TERM
variável de ambiente está definida corretamente?Respostas:
Não foi o
vi
que fez isso. Embora você digite linhas de comando em shells com espaços entre os argumentos, as linhas de comando são, na verdade, sequências discretas de seqüências internamente, não uma sequência longa e separada por espaços. O shell separou a linha de comandos em sequências de argumentos individuais antes do lançamento do comando.Em C, as strings são finalizadas com caracteres NUL e são mostradas como
^@
.Para digitar esses caracteres, você deve prefixá-los com Control- vpara o próximo caractere literal.
Por exemplo, neste caso: Control- vseguido por Control- @.
O caractere especial que introduz os próximos caracteres literais é normalmente Control- vmas é realmente configurável. Digite
stty -a
para descobrir como está definido. Procurelnext
na saída.fonte
:%s#^@##g
. Desde que eu copiar, colado de terminal, vi tem colado-los como personagens originais ...^letter
é apenas uma notação visual para isso, nenhum sinal real envolvido. E sim, você precisa escapar do caractere de controle, o Ctrl-V é como você faz isso no teclado. Isso funciona mais em todos os lugares. Para sua informação, a outra resposta contém uma alternativa específica davi
linha de comando para evitar a necessidade de digitar o caractere de controle.^@
e você a copiou e colou, use-a\^@
para representar essa sequência de dois caracteres no vi. Muitos softwares usam barra invertida para significar "interpretar o próximo caractere literalmente, em vez de usar sua função especial".Esse símbolo representa um caractere NULL, com valor ASCII 000.
Você poderia tentar:
Alternativo:
Em um teclado em que o símbolo @ está em cima da 2tecla (obrigado Celada), você pode:
%s/<CTRL-2>/ /g
(no PC)%s/<CTRL-SHIFT-2>/ /g
(no Mac)onde
<CTRL-2>
significa primeiro pressione o CTRLPC no PC, mantendo-o pressionado, pressione 2, solte CTRL.e
<CTRL-SHIFT-2>
significa primeiro pressionar e pressionar o controlMac, mantendo pressionado, pressionar e pressionar shiftMac, mantendo pressionado, pressionar 2, soltar controle shift.Finalmente, os dois comandos devem resultar na
%s/^@/ /g
tela.^@
significa um único caractere, não^
seguido de@
, então você não pode simplesmente digitar^
e@
em uma linha no comando acima.Este comando substitui todos os
^@
caracteres com espaço.( Fonte )
fonte
@
está o topo da2
tecla.sed 's / \ r //' input> output
insira a descrição do link aqui
fonte