it-swarm.com.de

Suchen und ersetzen Sie Steuerzeichen (^ @, ^ M, ^ I ....) in vi

Ich habe diese Zeile von /proc/some_proc_id/cmdline in meiner Ubuntu-Maschine,

Java^@-jar^@/usr/lib/Selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@

Irgendwie werden die Leerzeichen durch ^@ in vi. Ich habe versucht, sie mit dem Befehl durch Leerzeichen zu ersetzen.

:%s#^@# #g

Aber es heißt: pattern not found ^@.

Wie kann man Sonderzeichen ersetzen, insbesondere solche, die mit einem Karat-Symbol beginnen?

14
user93868

Irgendwie werden die Leerzeichen in vi durch ^@ Dargestellt.

Es ist nicht vi, das das getan hat. Obwohl Sie Befehlszeilen in Shells mit Leerzeichen zwischen den Argumenten eingeben, handelt es sich bei Befehlszeilen tatsächlich um diskrete Sequenzen von Zeichenfolgen, nicht um eine lange, durch Leerzeichen getrennte Zeichenfolge. Die Shell hat die Befehlszeile vor dem Start des Befehls in einzelne Argumentzeichenfolgen unterteilt.

In C werden Zeichenfolgen mit NUL-Zeichen abgeschlossen und diese werden als ^@ Angezeigt.

Wie kann man Sonderzeichen ersetzen, insbesondere solche, die mit einem Karat-Symbol beginnen?

Um diese Zeichen eingeben zu können, müssen Sie ihnen ein Präfix voranstellen Control- -v für wörtlich nächstes Zeichen.

Zum Beispiel in diesem Fall: Control- -v gefolgt von Control- -@.

Das Sonderzeichen, das wörtliche nächste Zeichen einführt, ist normalerweise Control- -v aber es ist tatsächlich konfigurierbar. Geben Sie stty -a Ein, um herauszufinden, auf was es eingestellt ist. Suchen Sie in der Ausgabe nach lnext.

15
Celada

Dieses Symbol repräsentiert ein NULL-Zeichen mit ASCII Wert 000).

Du könntest es versuchen:

:%s/\%x00/ /g

Alternative:

Auf einer Tastatur, auf der sich das @ -Symbol über dem befindet 2 Schlüssel (danke Celada) Sie können tun:

  • %s/<CTRL-2>/ /g (Auf dem PC)

  • %s/<CTRL-SHIFT-2>/ /g (Auf Mac)

dabei bedeutet <CTRL-2>, dass Sie zuerst die Taste drücken CTRL auf dem PC, halten Sie es gedrückt, drücken Sie 2, Veröffentlichung CTRL.

und <CTRL-SHIFT-2> bedeutet, dass Sie zuerst die Taste drücken control Halten Sie auf dem Mac die Taste gedrückt und drücken Sie sie nach unten shift auf dem Mac, halten Sie es gedrückt, drücken Sie 2, Veröffentlichung control und shift.

Schließlich sollten beide Befehle zu %s/^@/ /g Auf dem Bildschirm führen. ^@ Bedeutet ein einzelnes Zeichen, nicht ^ Gefolgt von @. Sie können also nicht einfach ^ Und @ In einer Reihe eingeben im obigen Befehl.

Dieser Befehl ersetzt alle ^@ Durch Leerzeichen.

( Quelle )

4
erik

sed 's/\ r //' Eingabe> Ausgabe

Linkbeschreibung hier eingeben

0
jim