Skopiowałem ten wiersz z /proc/some_proc_id/cmdline
mojej maszyny Ubuntu,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
W jakiś sposób znaki spacji są reprezentowane przez ^@
w vi. Próbowałem zastąpić je spacjami za pomocą polecenia,
:%s#^@# #g
Ale to mówi pattern not found ^@
.
Jak zastąpić znaki specjalne, zwłaszcza te rozpoczynające się symbolem karatowym?
vi
special-characters
Gilles „SO- przestań być zły”
źródło
źródło
TERM
i wiele razy tak jestscreen
TERM
zmienna środowiskowa jest ustawiona poprawnie?Odpowiedzi:
To nie
vi
tak. Chociaż wpisujesz wiersze poleceń w powłokach ze spacjami między argumentami, wiersze poleceń są w rzeczywistości dyskretnymi sekwencjami ciągów wewnętrznych, a nie jednym długim ciągiem oddzielonym spacjami. Powłoka podzieliła wiersz poleceń na poszczególne ciągi argumentów przed uruchomieniem polecenia.W C łańcuchy są zakończone znakami NUL i są pokazane jako
^@
.Aby wpisać te znaki, musisz poprzedzić je znakiem Control- vdosłownie następny znak.
Na przykład w tym przypadku: Control- va następnie Control- @.
Znak specjalny, który wprowadza dosłowne następne znaki, jest zwykle Control- vale w rzeczywistości można go konfigurować. Wpisz,
stty -a
aby dowiedzieć się, na co jest ustawiony. Poszukajlnext
w danych wyjściowych.źródło
:%s#^@##g
. Odkąd skopiowałem, wkleiłem z terminala, vi^letter
jest po prostu zapisem wizualnym, bez udziału prawdziwej karetki. I tak, musisz uciec od znaku kontrolnego, Ctrl-V to sposób, w jaki to robisz z klawiatury. To działa najbardziej wszędzie. FYI, druga odpowiedź zawiera alternatywną, specyficzną dlavi
linii poleceń, aby w ogóle uniknąć konieczności wpisywania znaku kontrolnego.^@
i skopiowałeś go, użyj\^@
do reprezentowania tego dwuznakowego ciągu w vi. Wiele programów używa odwrotnego ukośnika, co oznacza „dosłownie interpretować następny znak, zamiast używać jego funkcji specjalnej”.Ten symbol reprezentuje znak NULL o wartości ASCII 000.
Możesz spróbować:
Alternatywny:
Na klawiaturze, na której symbol @ znajduje się nad 2klawiszem (dzięki Celada) możesz:
%s/<CTRL-2>/ /g
(na PC)%s/<CTRL-SHIFT-2>/ /g
(na Macu)gdzie
<CTRL-2>
oznacza najpierw naciśnij CTRLkomputer PC, trzymając go tak, jak wciśnięty, naciśnij 2, zwolnij CTRL.i
<CTRL-SHIFT-2>
oznacza, że najpierw naciśnij controlkomputer Mac, trzymając go jak wciśnięty, naciśnij shiftkomputer Mac, trzymając go wciśnięty, naciśnij 2, zwolnij controli shift.Wreszcie oba te polecenia powinny zostać
%s/^@/ /g
wyświetlone na ekranie.^@
Oznacza pojedynczy znak, nie^
następuje@
, więc nie można po prostu wpisać^
i@
z rzędu w powyższym poleceniu.To polecenie zastępuje wszystkie
^@
spacje.( Źródło )
źródło
@
jest on na górze2
klawisza.sed 's / \ r //' input> output
wprowadź opis linku tutaj
źródło