grep palauttaa “ Binaaritiedosto (vakiotulo) vastaa ”, kun yritetään löytää merkkijono tiedostosta

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

  • Mikä on file .bash_history (file ~/.bash_history) tulos?
  • lähtö on .bash_history: data
  • tämä jostain syystä tapahtui vain apache-lokini kanssa. kiitos q & a
  • hyvin läheisesti toisiinsa: unix.stackexchange.com/q/19907/5510

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_history luki .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ä -a tekee?
  • @TatakaiWasumi -a tekee grep käsitellä tiedostoa binäärisenä.
  • -a tee grep kä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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *