Kuinka napata yksi välilyönti tekstissä?

cat a.txt| grep " " 

tai

cat a.txt| grep "\s " 

Kommentit

  • cat -palvelun vapaa käyttö molemmissa tapauksissa. Ensimmäinen voitaisiin kirjoittaa grep ' ' a.txt, toista muutettaisiin samalla tavalla.
  • Huomaa, että \s vastaa myös sarkainta, return, pystysuora välilehti, lomakesyöte ja teknisesti uusi viiva. Jos haluat sovittaa vain välilyönnin ja välilehden, käytä [[:blank:]] tai [ \t].
  • gnu grep -toiminnon avulla voit rajoita osumien lukumäärä (-m vaihtoehto) yhteen …
  • Tämä on yksinkertaisempaa egrep " \ s " a.txt

Vastaa

Jos haluat grep vain yhdelle välilyönnille, kun kirjoitat kysymykseesi, käytät jotain seuraavista:

grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt 

tai POSIX-muunnelmille:

grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt 

tai vähemmän luettava POSIX-muunnos:

grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt 

Oletetaan, että haluat sulkea pois rivit, jotka sisältävät enemmän kuin yhden vierekkäisen tilan , tämä edellyttää nimenomaisesti, että on yksi välilyönti, jota ei edeltää välilyönti eikä sitä seuraa välilyönti.

On myös syytä huomata, että kaikki grep-versiot eivät tue säännöllisen lausekkeen ohjaimia.

Kommentit

  • Voit jättää pois kaikki edelliset esimerkit viimeisestä esimerkistä ja parantaa luettavuutta käyttämällä POSIX-määritettyä -E -vaihtoehtoa, joka sallii laajennetut regeksit. grep -E '(^|[^ ]) ([^ ]|$)' a.txt Joka tapauksessa taaksepäin viiva ennen välilyöntiä ei tarvita ' t ja ' puuttuu ennen lopullista sulkeutta. grep -versioille, jotka ymmärtävät \s, voit lyhentää lauseketta muulle kuin välilyönnille [^\s] kohtaan \S
  • Tämä toimii kuitenkin myös, [[: blank:]]

Vastaa

Luulen, että löysin sen:

grep "\+[[:space:]]\+" a.xml 

vastaus

Vaihtoehto 2 löytää vain kaksi välilyöntiä. Jos käytät "\s", sen sijaan molemmat vaihtoehdot toimivat.

Voit helposti testata tämän itse, joten mikä on oikea kysymyksesi?

Kommentit

  • Miksi löytää vain kaksi välilyöntiä? Mielestäni se sopii mihin tahansa välilyöntiin.
  • @Gnouc: Variantti 2 kirjoittaessaan sitä '\s ' vastaa vähintään kahta välilyöntiä peräkkäin, koska hän lisäsi välilyönnin merkkiryhmän \s jälkeen.
  • Sinä ' olet oikeassa, en ' t näe välilyönti \s jälkeen, virheeni.

Vastaa

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