Sebagai contoh:
sed 's/\u0091//g' file1
Saat ini, saya harus lakukan hexdump
untuk mendapatkan nomor hex dan dimasukkan ke dalam sed
sebagai berikut:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
Lalu:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
mencetak sesuatu?sed
memiliki pengubah g, ia menggantikan semua kejadian juga ketika mereka saling mengikuti. Juga sed harus menghitungnya sebagai satu karakter, lihat:echo -ne "馑" | wc -m
memberi1
. Jika Anda menghitung byte (wc -c
) itu akan kembali3
. Apakah saya memahami pertanyaan Anda dengan benar?.
berarti "satu karakter" atau "satu byte"?echo 馑 | sed s/...//
memberi saya馑
(tidak ada yang diganti)en_US.UTF-8
, tetapi tidak di bawahC
.Perl dapat melakukan itu:
-CS
menyalakan UTF-8 untuk input, output dan kesalahan standar.sumber
Sejumlah versi
sed
dukungan Unicode :Saya tidak dapat menemukan informasi tentang BSD sed, yang saya pikir aneh, tetapi saya pikir kemungkinannya bagus karena mendukung Unicode juga. Sayangnya, tidak ada cara standar untuk mengetahui
sed
pengkodean mana yang akan digunakan, sehingga masing-masing melakukan ini dengan caranya sendiri.sumber
Ini bekerja untuk saya:
Setetes lebih banyak kata daripada yang saya inginkan; inilah penjelasan lengkapnya:
-n
nonaktifkan file swap vim-E
Ex mode ditingkatkan-s
mode diam+'%s/\%u9991//g'
jalankan perintah substitusi+wq
Simpan dan keluarsumber
file1
di tempat , apakah itu benar?Dengan versi BASH terbaru, cukup hapus tanda kutip di sekitar ekspresi sed dan Anda dapat menggunakan string BASH yang lolos. Spasi dalam ekspresi sed atau bagian dari ekspresi sed yang mungkin ditafsirkan oleh BASH sebagai wildcard dapat dikutip secara individual.
sumber
Bekerja untuk saya dengan sed GNU (versi 4.2.1):
(Sebagai pengganti lain untuk
sed
Anda juga bisa menggunakan GNUawk
; tetapi sepertinya tidak perlu.)sumber