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”>
file .bash_history (file ~/.bash_history) kimenete? .bash_history: data 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
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
-zzá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.
grep -a git .bash_historykimenete?-a?-ateszigrephogy a fájlt binárisként kezelje.-ahogygrepbináris fájlt dolgozzon fel, mintha szöveg lenne.