if grep -q "�" out.txt
then
echo "working"
else
cat out.txt
fi
Pada dasarnya, jika file "out.txt" berisi " " di mana saja di dalam file, saya ingin menggemakan "berfungsi" DAN jika file "out.txt" TIDAK mengandung " " di mana saja dalam file, maka saya ingin ke cat out.txt
EDIT: Jadi inilah yang saya lakukan. Saya mencoba untuk memaksa mendekripsi openssl.
openssl enc mengembalikan 0 pada keberhasilan, bukan nol sebaliknya. Catatan: Anda akan mendapatkan hasil positif palsu karena AES / CBC hanya dapat menentukan apakah "dekripsi berhasil" berdasarkan pada mendapatkan padding yang benar. Jadi file tersebut didekripsi tetapi itu tidak akan menjadi kata sandi yang benar sehingga akan memiliki omong kosong di dalamnya. Karakter umum dalam omong kosong adalah " ". Jadi saya ingin loop do terus berjalan jika output mengandung " ".
Inilah tautan git saya https://github.com/Raphaeangelo/OpenSSLCracker Inilah skripnya
while read line
do
openssl aes-256-cbc -d -a -in $1 -pass pass:$line -out out.txt 2>out.txt >/dev/null && printf "==================================================\n"
if grep -q "�" out.txt
then
:
else
cat out.txt &&
printf "\n==================================================" &&
printfn"\npassword is $line\n" &&
read -p "press return key to continue..." < /dev/tty;
fi
done < ./password.txt
masih menunjukkan saya output dengan charicter di dalamnya
PEMBARUAN: Dipecahkan
printf "Working..."
while read line
do
openssl aes-256-cbc -d -a -in $1 -pass pass:$line -out out.txt 2>out.txt >/dev/null
if file out.txt | grep -q 'out.txt: ASCII text'
then
printf "\n==================================================\n\n" &&
cat out.txt &&
printf "\n==================================================" &&
printf "\npassword is $line\n" &&
read -p "press return key to continue..." < /dev/tty;
else
:
fi
done < ./password.txt
grep
lama mengerti unicode (yang membuatnya jauh lebih lambat, jadi untuk mencari string ascii, aLANG=C grep
adalah peningkatan kinerja yang sangat besar).How to grep for unicode � in a bash script
apakah ini yang benar-benar Anda inginkan? mengekstrak unicode? mohon klarifikasi sehingga kami dapat membantu!Jawaban:
grep
adalah alat yang salah untuk pekerjaan itu.Anda melihat
U+FFFD REPLACEMENT CHARACTER
bukan karena itu benar-benar dalam konten file, tetapi karena Anda melihat file biner dengan alat yang seharusnya hanya menangani input berbasis teks. Cara standar untuk menangani input yang tidak valid (yaitu, data biner acak) adalah mengganti semua yang tidak valid di lokal saat ini (kemungkinan besar UTF-8) dengan U + FFFD sebelum menyentuh layar.Itu berarti sangat mungkin bahwa literal
\xEF\xBF\xBD
(urutan byte UTF-8 untuk karakter U + FFFD) tidak pernah terjadi dalam file.grep
sepenuhnya benar dalam memberi tahu Anda, tidak ada.Salah satu cara untuk mendeteksi apakah suatu file berisi beberapa biner yang tidak dikenal adalah dengan
file(1)
perintah:Untuk semua jenis file yang tidak dikenal, itu hanya akan mengatakan
data
. Mencobauntuk memeriksa apakah file tersebut benar-benar berisi biner sembarang dan dengan demikian kemungkinan besar adalah sampah.
Jika Anda ingin memastikan bahwa itu
out.txt
adalah file teks yang disandikan UTF-8 saja, Anda dapat menggunakaniconv
:sumber
file
mendeteksi beberapa tipe konten lain untuk file-file itu. Jika Anda 100% selalu hanya mengharapkan UTF-8 file teks dikodekan, Anda dapat memeriksa denganiconv
, jika file adalah valid UTF-8:iconv -f utf-8 -t utf-16 out.txt >/dev/null
. Jikaiconv
tidak dapat mengonversi file karena urutan UTF-8 tidak valid, itu akan kembali dengan kode keluar yang tidak nol.grep -axv '.*' badchars.txt
. Itu akan mencetak setiap baris yang berisi Karakter Unicode yang tidak valid .file
bisa.TL; DR:
jawaban panjang
Kedua jawaban ini sangat menyesatkan dan pada dasarnya salah.
Untuk menguji, Dapatkan dua file ini (dari pengembang yang sangat dihormati: Markus Kuhn):
Demo
Yang pertama
UTF-8-demo.txt
adalah file yang dirancang untuk menunjukkan seberapa baik UTF-8 mampu menyajikan banyak bahasa, matematika, huruf braille dan banyak jenis karakter berguna lainnya. Lihatlah dengan editor teks (yang mengerti utf-8) dan Anda akan melihat banyak contoh dan tidak�
.Tes yang diajukan oleh satu jawaban: untuk membatasi rentang karakter
\x00-\x7F
akan menolak hampir semua yang ada di dalam file ini.Itu sangat salah dan tidak akan menghapus apa pun
�
karena tidak ada dalam file itu .Menggunakan tes yang direkomendasikan dalam jawaban itu akan menghapus
72.5 %
file:Itu (untuk tujuan paling praktis) seluruh file. File yang dirancang dengan sangat baik untuk menampilkan karakter yang benar-benar valid.
Uji
File kedua dirancang untuk mencoba beberapa kasus perbatasan untuk mengonfirmasi bahwa pembaca utf-8 melakukan pekerjaan dengan baik. Berisi di dalam banyak karakter yang akan menyebabkan ' ' ditampilkan. Tetapi rekomendasi jawaban yang lain (yang dipilih) untuk digunakan
file
gagal total dengan file ini. Hanya menghapus nol byte (\0
) (yang secara teknis ASCII valid) dan\x7f
byte (DEL - delete) (yang jelas merupakan karakter ASCII juga) akan membuat semua file valid untukfile
perintah:Tidak hanya
file
gagal mendeteksi banyak karakter yang salah, tetapi juga gagal mendeteksi dan melaporkan bahwa itu adalah file yang disandikan UTF-8.Dan ya,
file
dapat mendeteksi dan melaporkan teks yang disandikan UTF-8:Juga,
file
gagal melaporkan sebagai ASCII sebagian besar karakter kontrol dalam rentang 1 hingga 31. Ini (file
) melaporkan beberapa rentang sebagaidata
:Lainnya sebagai
ASCII text
:Sebagai rentang karakter yang dapat dicetak (dengan baris baru):
Tetapi beberapa rentang dapat menyebabkan hasil yang aneh:
Program
file
ini bukan alat untuk mendeteksi teks, tetapi untuk mendeteksi angka ajaib dalam program atau file yang dapat dieksekusi.Rentang
file
mendeteksi, dan jenis yang sesuai yang dilaporkan yang saya temukan adalah:Nilai satu byte, sebagian besar ascii:
Rentang terenkode utf-8:
Salah satu solusi yang mungkin ada di bawah ini.
Jawaban Sebelumnya.
Nilai Unicode untuk karakter yang Anda posting adalah:
Ya, itu adalah Karakter Unicode 'REPLACEMENT CHARACTER' (U + FFFD) . Itu adalah karakter yang digunakan untuk mengganti karakter Unicode tidak valid yang ditemukan dalam teks. Ini adalah "bantuan visual", bukan karakter nyata. Untuk menemukan dan mendaftar setiap baris penuh yang berisi karakter UNICODE yang tidak valid, gunakan:
tetapi jika Anda hanya ingin mendeteksi jika ada karakter yang tidak valid, gunakan:
Jika hasilnya
1
file bersih, jika tidak akan menjadi nol0
.Jika yang Anda tanyakan adalah: bagaimana menemukan
�
karakter, maka, gunakan ini:Atau jika sistem Anda memproses teks UTF-8 dengan benar, cukup:
sumber
grep -axv '.*'
!! Saya telah berjuang dengan beberapa karakter buruk dalam file teks saya, dan bagaimana cara memperbaikinya dalam emacs, selama satu atau dua dekade !!!Jawaban paling awal ini adalah untuk pos asli yaitu:
Mencoba
dengan
if .. then
pernyataan sebagai berikut:Penjelasan💡:
-P
,--perl-regexp
: POLA adalah ekspresi reguler Perl-o
,--only-matching
: hanya menampilkan bagian dari POLA yang cocok dengan garis[^\x00-\x7F]
adalah regex untuk mencocokkan karakter non-ASCII tunggal.[[:ascii:]]
- Cocok dengan satu karakter ASCII[^[:ascii:]]
- Cocok dengan satu karakter non-ASCIIdi
bash
sumber
printf '%b' "$(printf '\\U%x' {128..131})" | grep -oP "[^\x00-\x7F]"
Hanya 4 karakter Unicode yang valid yang ditolak oleh kode Anda. :-(