Saya memiliki file teks yang berisi karakter null yang tidak diinginkan (ASCII NUL, \0
). Ketika saya mencoba untuk melihatnya di vi
saya melihat ^@
simbol, disisipkan dalam teks normal. Bagaimana bisa saya:
Identifikasi baris mana dalam file yang berisi karakter null? Saya telah mencoba grepping for
\0
dan\x0
, tetapi ini tidak berhasil.Hapus karakter nol? Menjalankan
strings
file membersihkannya, tetapi saya hanya ingin tahu apakah ini cara terbaik?
unix
shell
null
special-characters
dogbane
sumber
sumber
Jawaban:
Saya akan menggunakan
tr
:Jika Anda bertanya-tanya apakah pengalihan input di tengah argumen perintah berfungsi, itu berhasil. Kebanyakan kerang akan mengenali dan menangani I / O redirection (
<
,>
, ...) di mana saja di baris perintah, sebenarnya.sumber
tr -d '\000' < file-with-nulls > file-without-nulls
karena<
merupakan bagian dari fungsi pipa shell dan bukantr
.cat |
. Solusi yang bagus dan bersih dan memecahkan masalah saya.Gunakan perintah sed berikut untuk menghapus karakter null dalam file.
solusi ini mengedit file di tempatnya, penting jika file tersebut masih digunakan. meneruskan -i'ext 'membuat cadangan file asli dengan akhiran' ext 'ditambahkan.
sumber
sed -i
membutuhkan ekstensi di argumen berikutnya, tetapi mungkin kosong. Dalam sistem-sistem, menambahkan''
, seperti dalam:sed -i '' 's/\x0//g "$FILE"
.tr
pada saya$ sed --version
->sed (GNU sed) 4.7
, saya harus menggunakan permintaan berikut untuk mendapatkan file cadangan yang disebutexample.csv.bak
:sed -i.bak 's/\x0//g' example.csv
Sejumlah besar karakter NUL yang tidak diinginkan, katakanlah satu setiap byte lainnya, menunjukkan bahwa file tersebut dikodekan dalam UTF-16 dan yang harus Anda gunakan
iconv
untuk mengubahnya menjadi UTF-8.sumber
iconv -f UTF-16 -t UTF-8 file
.Saya menemukan yang berikut ini, yang mencetak baris mana, jika ada, yang memiliki karakter nol:
Juga, oktal dump dapat memberi tahu Anda jika ada nulls:
sumber
Jika baris pada file diakhiri dengan \ r \ n \ 000 maka yang berhasil adalah menghapus \ n \ 000 lalu ganti \ r dengan \ n.
sumber
Berikut adalah contoh cara menghapus karakter NULL menggunakan
ex
(di tempat):dan untuk banyak file:
Untuk rekursif, Anda dapat menggunakan opsi globbing
**/*.txt
(jika didukung oleh shell Anda).Berguna untuk skrip karena
sed
dan-i
parameternya adalah ekstensi BSD non-standar.Lihat juga: Bagaimana cara memeriksa apakah file tersebut adalah file biner dan membaca semua file yang bukan?
sumber
Saya menggunakan:
untuk menghilangkan angka nol dalam file.
sumber
Saya menghadapi kesalahan yang sama dengan:
Saya memecahkan masalah dengan mengubah pengkodean menjadi
utf-16
sumber