I ”m Ubuntussa ja kirjoitin cat .bash_history | grep git ja se palasi
Binaaritiedosto (vakiotulo) vastaa
Oma bash_history on olemassa ja siinä on useita rivejä joka alkaa git.
Mikä aiheutti tämän virheen näyttämisen ja kuinka voin korjata sen?
Kommentit
Vastaa
Presuma bly tiedosto .bash_history alkaa ei-tekstidata, joten grep käsittelee tiedostoa binäärisenä. Tämän vahvistaa file .bash_history -lähtö:
.bash_history: data
Voit lukea muutaman tavun alusta asti, jotta normit täyttävät näkymä:
head -c1K .bash_history
Tässä luen ensin 1 KiB: n.
Voit lähettää STDOUT-osoitteen hexdump / od tai vastaava.
Lisähuomautuksena grep vie tiedostonimen ( s) argumenttina, joten cat on tässä hyödytön; kokeile tätä:
grep git .bash_history
Kommentit
- I ' En vieläkään tiedä miten ratkaista grep-ongelma,
head -c1k .bash_historyluki .bash_history-tiedostoni 38 ensimmäistä riviä. Kaikki oli luettavissa - @TatakaiWasumi Mikä on
grep -a git .bash_history-tulos? - Se toimi! Sain kaiken mitä halusin. Mitä
-atekee? - @TatakaiWasumi
-atekeegrepkäsitellä tiedostoa binäärisenä. -
-ateegrepkäsittele binaaritiedosto ikään kuin se olisi teksti.
vastaus
Voit käyttää grep -a "pattern".
man grep -sivulta:
-a, –text
Käsittele binaaritiedosto ikään kuin se olisi teksti; tämä vastaa –binary-files = text -vaihtoehtoa.
kommentit
- Tämä on auttanut minua käytettäessä
-z-lippua vastaamaan useita rivejä. - Se on toiminut minulle, mutta silti outoa, koska tiedostoni ei ole ' ta-binaaritiedosto. [ruudukko @ serverdg2 jäljitys] $ tiedosto listener.log kuuntelija.log: data
Vastaa
Minulla oli sama ongelma, kun haluan napata .bash_history. (Pieni huomautus: Nimetin historiani uudelleen niin, että luotiin uusi. Tätä uutta historiaa ei käsitelty binäärisenä.)
@heemayls -vastauksessa sanotaan, että grep vie tiedostonimet ja cat olisi hyödytön. Tämä ei ole täysin totta. grep s -sivulta:
Jos tiedostoja ei ole määritetty tai jos tiedosto ”-” on annettu, grep etsii vakiotuloa.
Joten voisit käyttää cat ja liittää sen osoitteeseen grep. Tämä ei kuitenkaan ratkaise ongelmaa, että .bash_history käsitellään binaarisena. Ainoa oikea asia on käyttää grep -a (kuten @AK_: n vastauksessa), onko grep historia suoraan vai cat ja putki.
cat .bash_history | grep -a git
tai
grep -a git .bash_history
vastaus
Virhe johtuu siitä, että tiedostossa olevat tiedot ovat binaarisia, voit käyttää merkkijonokomentoa nähdäksesi ihmisen luettavissa olevat (ts. strings) osa, jonka tavallisesti etsit käyttämällä grep
strings data | grep -i whatever
Kommentit
- Tämä ei koske kysymyksen ensimmäistä osaa, ts. " mikä aiheuttaa ongelma ".
Vastaa
Tämä voi johtua tyhjillä tavuilla bash-historiassa. Nollamerkkisten rivien poistaminen voi ratkaista ongelman. Voit tarkistaa heidät grep: n Perl-regexp-tilassa:
grep -Pa "\x00" .bash_history
Tämä viesti sisältää ehdotuksia muille kuin unix-järjestelmille.
file .bash_history(file ~/.bash_history) tulos?.bash_history: data