Ich kopierte diese Zeile /proc/some_proc_id/cmdline
in meinem Ubuntu-Computer,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
Irgendwie werden die Leerzeichen durch ^@
vi dargestellt. Ich habe versucht, sie mit dem Befehl durch Leerzeichen zu ersetzen.
:%s#^@# #g
Aber es sagt pattern not found ^@
.
Wie kann man Sonderzeichen ersetzen, insbesondere solche, die mit einem Karat-Symbol beginnen?
vi
special-characters
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
TERM
und oft ist esscreen
TERM
Umgebungsvariable richtig eingestellt?Antworten:
Das hat es nicht
vi
getan. Obwohl Sie Befehlszeilen in Shells mit Leerzeichen zwischen den Argumenten eingeben, handelt es sich bei Befehlszeilen tatsächlich um diskrete Folgen von Zeichenfolgen, nicht um eine durch Leerzeichen getrennte Zeichenfolge. Die Shell trennte die Befehlszeile vor dem Start des Befehls in einzelne Argumentzeichenfolgen.In C werden Zeichenfolgen mit NUL-Zeichen abgeschlossen und als angezeigt
^@
.Um diese Zeichen eingeben zu können, müssen Sie ihnen Control- vfür das nächste Zeichen voranstellen .
Zum Beispiel in diesem Fall: Control- vgefolgt von Control- @.
Das Sonderzeichen, das wörtliche nächste Zeichen einführt, ist normalerweise Control- vaber es ist tatsächlich konfigurierbar. Geben Sie ein
stty -a
, um herauszufinden, auf was es festgelegt ist. Suchen Sie nachlnext
in der Ausgabe.quelle
:%s#^@##g
. Seit ich kopiere, vom Terminal eingefügt, hat vi sie als Originalzeichen eingefügt ...^letter
Ist nur eine visuelle Notation dafür, kein echtes Caret. Und ja, Sie müssen dem Steuerzeichen entkommen, die Tastenkombination Strg-V bewirkt dies über die Tastatur. Das funktioniert fast überall. Zu Ihrer Information, die andere Antwort enthält eine Alternative, die spezifisch fürvi
die Befehlszeile ist, um zu vermeiden, dass das Steuerzeichen überhaupt eingegeben werden muss.^@
und Sie diese kopiert haben, verwenden Sie\^@
diese Zeichenfolge, um sie in vi darzustellen. Viele Softwareprogramme verwenden Backslash, um "das nächste Zeichen wörtlich zu interpretieren, anstatt seine spezielle Funktion zu verwenden".Dieses Symbol steht für ein NULL-Zeichen mit dem ASCII-Wert 000.
Du könntest es versuchen:
Alternative:
Auf einer Tastatur, auf der sich das @ -Symbol über der 2Taste befindet (danke Celada), können Sie Folgendes tun:
%s/<CTRL-2>/ /g
(auf dem PC)%s/<CTRL-SHIFT-2>/ /g
(auf Mac)Wobei
<CTRL-2>
bedeutet, zuerst den CTRLPC herunterzudrücken, gedrückt zu halten, zu drücken 2, loszulassen CTRL.und
<CTRL-SHIFT-2>
Mittel zuerst nach unten drücken, die controlauf Mac, hält es so nach unten gedrückt wird, drücken Sie shiftauf Mac, als nach unten gedrückt halten, Hit 2, Release controlund shift.Schließlich sollten beide Befehle
%s/^@/ /g
auf dem Bildschirm angezeigt werden.^@
bedeutet ein einzelnes Zeichen, nicht^
gefolgt von@
, so dass Sie geben nicht nur kann^
und@
eine Zeile in in dem obigen Befehl.Dieser Befehl ersetzt alle
^@
durch Leerzeichen.( Quelle )
quelle
@
über der2
Taste befindet.sed 's / \ r //' Eingabe> Ausgabe
Geben Sie hier die Beschreibung des Links ein
quelle