Nasıl bazı ikili veri içeren bir metin dosyası grep için?
grep verir
Binary file test.log matches
Örneğin
echo "line1 re \x00\r\nline2\r\nline3 re\r\n" > test.log # in zsh
echo -e "line1 re \x00\r\nline2\r\nline3 re\r\n" > test.log # in bash
grep re test.log
Sonuç satır1 ve satır 3 (toplam iki satır) gösterecektir diliyorum.
Kullanma imkanı tr
okunabilir veri içine basılabilecek verileri, grep tekrar çalışalım dönüştürmek mi?
CEVAP
Bir yolu sadece metin her neyse, grep --text
ile ikili dosyaları tedavisinde ama bu ikili bilgilerinizi terminal gönderiliyor neden olabilir. Eğer çıkış akışı (VT/ARALIK ya da diğerleri gibi) yorumladığı bir terminal kullanıyorsanız gerçekten iyi bir fikir değil.
Alternatif olarak, aşağıdaki komutu ile tr
üzerinden dosya gönderebilirsiniz:
tr '[\000-\011\013-\037\177-\377]' '.' <test.log | grep whatever
Bu hiçbir şey daha az bir boşluk karakteri (yeni satır hariç) ve her şeyi 126, .
Bir karakter haline daha büyüktür, sadece vekaletname tercümesi bırakarak değiştirir.
Eğer her bir karakter farklı bir yerini, aşağıdaki C programı, klasik standart bir filtre gibi bir şey kullanabilirsiniz: . yasadışı isterseniz
#include<stdio.h>
int main (void) {
int ch;
while ((ch = getchar()) != EOF) {
if ((ch == '\n') || ((ch >= ' ') && (ch <= '~'))) {
putchar (ch);
} else {
printf ("{{x}}", ch);
}
}
return 0;
}
Bu NN
karakter hex kodu {{NN}}
verecektir. Sadece istediğiniz ne olursa olsun printf
ayarlayabilirsiniz.
Nerede eylem programı burada görebilirsiniz:
pax$ printf 'Hello,\tBob\nGoodbye, Bob\n' | ./filterProg
Hello,{{09}}Bob
Goodbye, Bob
Nasıl bazı HTML etiketleri için rasgel...
Nasıl saklı satır içeren varolan bir S...
Nasıl Vim bazı uzunluğu için metin sar...
Nasıl bir tarayıcı aslında bazı metin ...
Nasıl Linux üzerinde grep ile dosyalar...