J'ai copié cette ligne /proc/some_proc_id/cmdline
dans ma machine Ubuntu,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
D'une manière ou d'une autre, les caractères d'espace sont représentés par ^@
en vi. J'ai essayé de les remplacer par des caractères d'espace en utilisant la commande,
:%s#^@# #g
Mais il dit pattern not found ^@
.
Comment remplacer les caractères spéciaux, en particulier ceux qui commencent par le symbole carat?
vi
special-characters
Gilles 'SO- arrête d'être méchant'
la source
la source
TERM
et souvent, c'estscreen
TERM
variable d'environnement est-elle correctement définie?Réponses:
Ce n'est pas
vi
ça qui a fait ça. Bien que vous tapiez des lignes de commande dans des shells avec des espaces entre les arguments, les lignes de commande sont en fait des séquences discrètes de chaînes en interne, pas une longue chaîne séparée par des espaces. Le shell a séparé la ligne de commande en chaînes d'arguments individuelles avant le lancement de la commande.En C, les chaînes se terminent par des caractères NUL et ceux-ci sont représentés par
^@
.Pour saisir ces caractères, vous devez les préfixer avec Control- vpour le caractère littéral suivant.
Par exemple dans ce cas: Control- vsuivi de Control- @.
Le caractère spécial qui introduit les caractères littéraux suivants est normalement Control- vmais il est en fait configurable. Tapez
stty -a
pour savoir à quoi il est configuré. Recherchezlnext
dans la sortie.la source
:%s#^@##g
. Depuis que je copie, collé depuis le terminal, vi les a collés en tant que caractères originaux ...^letter
est juste une notation visuelle pour cela, aucun véritable curseur n'est impliqué. Et oui, vous devez échapper au caractère de contrôle, le Ctrl-V est la façon dont vous faites cela depuis le clavier. Cela fonctionne le plus partout. Pour info, l'autre réponse contient une alternative, spécifique àvi
la ligne de commande de, pour éviter d'avoir à taper le caractère de contrôle.^@
et que vous les copiez-collez, utilisez-les\^@
pour représenter cette chaîne de deux caractères dans vi. De nombreux logiciels utilisent la barre oblique inverse pour signifier «interpréter le caractère suivant littéralement au lieu d'utiliser sa fonction spéciale».Ce symbole représente un caractère NULL, avec la valeur ASCII 000.
Tu pourrais essayer:
Alternative:
Sur un clavier où le symbole @ est au-dessus de la 2touche (merci Celada), vous pouvez faire:
%s/<CTRL-2>/ /g
(sur PC)%s/<CTRL-SHIFT-2>/ /g
(sur Mac)où
<CTRL-2>
signifie d'abord appuyer sur CTRLle PC, en le maintenant enfoncé, appuyer 2, relâcher CTRL.et
<CTRL-SHIFT-2>
signifie d'abord appuyer sur controlle Mac, en le maintenant tel qu'il est enfoncé, appuyer sur shiftle Mac, en le maintenant enfoncé, appuyer 2, relâcher controlet shift.Enfin, les deux commandes devraient
%s/^@/ /g
apparaître à l'écran.^@
signifie un seul caractère, non^
suivi par@
, donc vous ne pouvez pas simplement taper^
et@
dans une ligne dans la commande ci-dessus.Cette commande remplace tous les
^@
caractères d'espacement.( Source )
la source
@
trouve en haut de la2
touche.sed 's / \ r //' entrée> sortie
entrez la description du lien ici
la source