SORU
3 NİSAN 2012, Salı


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
3 NİSAN 2012, Salı


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dcigs

    dcigs

    9 EYLÜL 2006
  • mist64

    mist64

    30 Mayıs 2006
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009