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_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
tekeegrep
käsitellä tiedostoa binäärisenä. -
-a
teegrep
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.
file .bash_history
(file ~/.bash_history
) tulos?.bash_history: data