A grep visszaadja a “ bináris fájlt (standard bemenet) egyezik a ” paranccsal, amikor megpróbál egy karakterláncot találni a

I “m” az Ubuntun, és beírtam a következőt: cat .bash_history | grep git, és ez visszaállt

A bináris fájl (standard bemenet) egyezik

Az én bash_history létezik, és sok sor van benne ami git -vel kezdődik.

Mi okozta ezt a hibát és hogyan tudom kijavítani? class = “comments”>

  • Mi a file .bash_history (file ~/.bash_history) kimenete?
  • a kimenet .bash_history: data
  • valamilyen oknál fogva ez éppen az apache naplóimmal történt. köszönöm a q & a
  • nagyon szorosan összefügg: unix.stackexchange.com/q/19907/5510
  • Válasz

    Presuma A .bash_history fájl nem szöveges adatokkal kezdődik, ezért grep binárisként kezeli a fájlt. Ezt megerősíti a file .bash_history kimenet:

    .bash_history: data 

    Az elejétől kezdve néhány bájtot olvashat, hogy megfelelő legyen nézet:

    head -c1K .bash_history 

    Itt olvasok először 1 KiB-t.

    Az STDOUT-ot átcsaphatja a hexdump / od vagy hasonló.


    Mellékesen: grep fájlnév ( s) érvként, tehát itt cat haszontalan; próbáld ki ezt:

    grep git .bash_history 

    Megjegyzések

    • I ' Még mindig nem tudom, hogyan oldhatjuk meg a grep problémát. Minden olvasható volt
    • @TatakaiWasumi Mi a grep -a git .bash_history kimenete?
    • Ez sikerült! Mindent megkaptam tőle. Mit csinál -a?
    • @TatakaiWasumi -a teszi grep hogy a fájlt binárisként kezelje.
    • -a hogy grep bináris fájlt dolgozzon fel, mintha szöveg lenne.

    Válasz

    Használhatja a grep -a "pattern" parancsot.

    a man grep oldalról:

    -a, –text
    Feldolgozzon egy bináris fájlt, mintha szöveg lenne; ez egyenértékű a –binary-files = text beállítással.

    Megjegyzések

    • Ez segített abban, hogy a -z zászlót több soron egyeztessem.
    • Nekem bevált, de mégis furcsa, mert a fájlom nem ' ta bináris fájl. [grid @ serverdg2 nyomkövetés] $ fájl listener.log listener.log: adatok

    Válasz

    ugyanaz a probléma, amikor meg akarom markolni a .bash_history fájlt. (Kis megjegyzés: Átneveztem az előzményeket, így létrejött egy új. Ezt az új előzményeket nem kezelték binárisként.)

    A @heemayls válaszban az szerepel, hogy grep fájlneveket vesz fel, és cat haszontalan lenne. Ez nem teljesen igaz. grep s man oldalról:

    Ha nincs megadva fájl, vagy ha a „-” fájl adott, a grep a szokásos bemenetet keresi.

    Tehát használhatja a cat fájlt, és csatolhatja a következőhöz: grep. Ez azonban nem oldja meg azt a problémát, hogy a .bash_history -t binárisként kezeljük. Az egyetlen helyes dolog az, ha grep -a -t használ (mint például az @AK_ válaszában), hogy grep az előzményeket közvetlenül használja, vagy a cat és egy pipa.


    cat .bash_history | grep -a git 

    vagy

    grep -a git .bash_history 

    Válasz

    A hiba az oka, hogy a fájl adatai binárisak, a string parancs segítségével használhatja az ember által olvashatót (azaz strings) rész, amelyet általában a grep

    strings data | grep -i whatever

    Megjegyzések

    • Ez nem foglalkozik a kérdés első részével, azaz " mi okozza a probléma ".

    Válasz

    Ezt okozhatja null bájttal a bash történelmében. A null karakterű sorok eltávolítása megoldhatja a problémát. A grep “Perl-regexp módjával ellenőrizheti őket:

    grep -Pa "\x00" .bash_history 

    Ez a bejegyzés javaslatai vannak a nem unix rendszerekre.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük