Saya menyalin baris ini dari /proc/some_proc_id/cmdline
di mesin ubuntu saya,
java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
Entah bagaimana, karakter spasi diwakili oleh ^@
in vi. Saya mencoba menggantinya dengan karakter spasi menggunakan perintah,
:%s#^@# #g
Tetapi dikatakan pattern not found ^@
,.
Bagaimana cara mengganti karakter khusus terutama yang dimulai dengan simbol karat?
vi
special-characters
Gilles 'SANGAT berhenti menjadi jahat'
sumber
sumber
TERM
dan banyak kali, itu adalahscreen
TERM
variabel lingkungan diatur dengan benar?Jawaban:
Bukan itu
vi
yang melakukan itu. Meskipun Anda mengetikkan baris perintah dalam shell dengan spasi di antara argumen, baris perintah sebenarnya urutan diskrit secara internal, bukan satu string panjang yang dipisahkan spasi. Shell memisahkan baris perintah menjadi string argumen individu sebelum perintah diluncurkan.Di C, string diakhiri dengan NUL karakter dan mereka ditampilkan sebagai
^@
.Untuk mengetikkan karakter-karakter itu, Anda harus mengawali mereka dengan Control- vuntuk karakter berikutnya yang sebenarnya.
Misalnya dalam hal ini: Control- vdiikuti oleh Control- @.
Karakter khusus yang memperkenalkan karakter berikutnya secara literal biasanya Control- vtetapi sebenarnya dapat dikonfigurasi. Ketik
stty -a
untuk mencari tahu apa itu diatur. Carilnext
di output.sumber
:%s#^@##g
. Sejak saya salin, disisipkan dari terminal, vi telah menempelkannya sebagai karakter asli ...^letter
hanyalah notasi visual untuk itu, tidak ada tanda sisipan nyata yang terlibat. Dan ya, Anda harus melarikan diri dari karakter kontrol, Ctrl-V adalah bagaimana Anda melakukannya dari keyboard. Itu paling berhasil di mana-mana. FYI, jawaban lain berisi alternatif, khusus untukvi
baris perintah, untuk menghindari keharusan mengetikkan karakter kontrol sama sekali.^@
dan Anda menyalinnya, lalu gunakan\^@
untuk mewakili string dua karakter di vi. Banyak perangkat lunak menggunakan backslash yang berarti "menafsirkan karakter berikutnya secara harfiah alih-alih menggunakan fungsi khusus".Itu simbol mewakili karakter NULL, dengan nilai ASCII 000.
Kamu bisa mencoba:
Alternatif:
Pada keyboard di mana simbol @ berada di atas 2tombol (terima kasih Celada), Anda dapat melakukannya:
%s/<CTRL-2>/ /g
(di PC)%s/<CTRL-SHIFT-2>/ /g
(di Mac)di mana
<CTRL-2>
berarti pertama-tama menekan CTRLPC, menjaganya seperti ditekan, tekan 2, lepaskan CTRL.dan
<CTRL-SHIFT-2>
berarti pertama-tama tekan ke bawah controlpada Mac, jaga agar ditekan, tekan ke bawah shiftpada Mac, jaga agar ditekan, tekan 2, lepaskan controldan shift.Akhirnya, kedua perintah harus menghasilkan di
%s/^@/ /g
layar.^@
berarti karakter tunggal, tidak^
diikuti oleh@
, jadi Anda tidak bisa mengetik^
dan@
berturut-turut pada perintah di atas.Perintah ini menggantikan semua
^@
dengan karakter spasi.( Sumber )
sumber
@
ada di atas2
tombol.sed 's / \ r //' input> output
masukkan deskripsi tautan di sini
sumber