Kuinka napata yksi välilyönti tekstissä?
cat a.txt| grep " "
tai
cat a.txt| grep "\s "
Kommentit
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.
cat
-palvelun vapaa käyttö molemmissa tapauksissa. Ensimmäinen voitaisiin kirjoittaagrep ' ' a.txt
, toista muutettaisiin samalla tavalla.\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]
.-m
vaihtoehto) yhteen …