grep gagal ketika digunakan pada beberapa file

5

Saya sudah mencoba selama 30 menit terakhir untuk mendapatkan ini berfungsi dengan baik. grep bukan hal yang paling sulit untuk digunakan, jadi saya agak bingung mengapa ini tidak berhasil.

File yang saya coba gunakan grep pada file log XHTML sederhana. Nama mereka ada dalam format [email protected], meskipun saya pikir itu tidak penting, dan di dalamnya adalah XHTML sederhana.

Saya menyalin satu file log menjadi testfile sehingga Anda dapat melihat output dari beberapa perintah dan mengapa membingungkan bagi saya:

[~/.chatlogs_windows/dec] > whoami
reid
[~/.chatlogs_windows/dec] > type grep
grep is /bin/grep
[~/.chatlogs_windows/dec] > uname -a
Linux reid-pc 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 x86_64 GNU/Linux
[~/.chatlogs_windows/dec] > cat /etc/issue
Linux Mint 10 Julia
[~/.chatlogs_windows/dec] > ls -lh testfile
-rw-r--r-- 1 reid reid  63K 2011-01-10 12:45 testfile
[~/.chatlogs_windows/dec] > tail -3 testfile 
</body>
</html>
[~/.chatlogs_windows/dec] > file testfile
testfile: XML document text
[~/.chatlogs_windows/dec] > grep html testfile 
[~/.chatlogs_windows/dec] > grep body testfile 
[~/.chatlogs_windows/dec] > grep "</html>" testfile 
[~/.chatlogs_windows/dec] > grep "</body>" testfile
[~/.chatlogs_windows/dec] > cat testfile | grep html
[~/.chatlogs_windows/dec] > cat testfile | wc -l
231
[~/.chatlogs_windows/dec] > cat testfile | tail -3
</body>
</html>
[~/.chatlogs_windows/dec] > chmod a+rw testfile && ls -lh | grep testfile
-rw-rw-rw- 1 reid reid  63K 2011-01-10 12:45 testfile
[~/.chatlogs_windows/dec] > grep html testfile

Itulah yang saya coba lakukan. Saya hanya ingin menggunakan grep -ri query . di ~/.chatlogs_windows, yang biasanya berfungsi dengan baik untuk saya ... tetapi untuk beberapa alasan, itu benar-benar gagal melalui file-file ini.

Jika itu penting, saya menyalin file-file ini dari partisi Windows 7 saya. Tapi saya mengunyah mereka dan memberi saya semua izin yang sesuai, dan program lainnya (seperti cat ) tampaknya membacanya dengan baik. Saya juga menyalin file teks ke file teks unix dan mengkonversi akhir baris dan mencobanya, tetapi tidak berhasil juga.

Saya menggunakan zsh, tetapi saya mencobanya di bash dan gagal juga. Juga, grep bekerja secara normal: Saya mencobanya di folder dokumen saya dan berhasil dengan sempurna.

Jika Anda memerlukan informasi lebih lanjut, beri tahu saya. Saya mencoba googling, tetapi saya tidak menemukan alasan untuk grep untuk tidak bekerja. Terima kasih sebelumnya.

Reid
sumber
Di bash, setelah Anda mengeksekusi salah satu dari mereka yang gagal grep panggilan, tunjukkan status keluar: echo $? (ke samping: ls -Alh | grep testfile lebih mudah ditulis / diketik sebagai ls -lh testfile )
Doug Harris
itu tidak masuk akal bagi saya juga tetapi hanya untuk memastikan: apakah Anda mencoba: cat testfile | grep "html"?
yasouser
Ini memberi "1" sebagai hasilnya. Aku bahkan tidak memikirkan itu. Tetapi menurut halaman manual grep, kecuali saya salah membaca, 1 adalah hasil ketika garis tidak ditemukan (tidak ada kecocokan).
Reid
@ anand.arumug: Ya, saya sudah mencobanya dan segala macam variasi. Tidak peduli apa yang saya lakukan, tidak ada yang pernah diberikan kembali.
Reid
Coba buat file baru (sentuh ~ / test.txt) dan salin / tempelkan konten testfile. Dan coba ambil. Lihat apa yang terjadi.
yasouser

Jawaban:

7

Alat grep tidak mengenali pengkodean file UTF-16.

RedGrittyBrick
sumber
2
Jenius! Bagi siapa pun yang mungkin memiliki masalah ini di masa depan, saya menggunakan perintah iconv -f UTF-16 -t UTF-8 testfile > testfile_enc untuk mengubahnya dan diuji dari sana. Akan lebih baik jika grep akan memberi tahu Anda tentang itu, alih-alih gagal secara diam-diam.
Reid
Besar! belajar sesuatu yang menarik :) Terima kasih kepada @Reid dan @RedGrittyBrick.
yasouser
File Grep dan Windows telah mencuri sedikit lebih banyak dari jiwa saya. Terima kasih @ reid
Will