Hogyan lehet egy helyet megfogni a szövegben?

cat a.txt| grep " " 

vagy

cat a.txt| grep "\s " 

Megjegyzések

  • A cat mindkét esetben indokolatlan használata. Az elsőt meg lehet írni grep ' ' a.txt, a másodikat hasonlóan lehet módosítani.
  • Ne feledje, hogy az \s egyezik a tabulátorral, a return, függőleges fül, űrlaptábla és technikailag újsor. Ha csak a szóköz és a tabulátorral szeretne egyeztetni, használja a [[:blank:]] vagy a [ \t] parancsot.
  • a gnu grep használatával az egyezések korlátozása (-m opció) egyre …
  • Ez egyszerűbb egrep " \ s " a.txt

Válasz

Ha szeretné grep csak egy szóközre, amikor felteszi a kérdését, a következőket használhatja:

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

vagy POSIX változatok esetén:

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

vagy a kevésbé olvasható POSIX-változat:

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

Feltételezve, hogy ki akarja zárni azokat a sorokat, amelyek egynél több szomszédos teret tartalmaznak , ez kifejezetten megköveteli, hogy legyen egy szóköz, amelyet nem előz meg szóköz, és nem követ szóköz.

Emellett érdemes megjegyezni, hogy a grep nem minden verziója támogatja a szabályos kifejezés vezérlését.

Megjegyzések

  • Kihagyhatja az összes utolsó visszavonást az utolsó példából, és javíthatja az olvashatóságot a POSIX által megadott -E opció használatával, amely lehetővé teszi a kiterjesztett regexek használatát. > Mindenesetre a szóköz előtti visszahúzás nem szükséges ', és ' hiányzik az utolsó záró zárójel előtt. a grep verziókhoz, amelyek értenek \s, lerövidítheti a nem szóköz kifejezést [^\s] \S
  • Ez azonban működik is, [[: blank:]]

Válasz

Azt hiszem, megtaláltam:

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

válasz

A 2. változat csak két szóközt fog találni. Ha "\s" ehelyett mindkét változat működni fog.

Könnyen kipróbálhatja ezt maga, akkor mi az aktuális kérdése?

Megjegyzések

  • Miért csak két szóközt találunk? Úgy gondolom, hogy minden szóköznek megfelel.
  • @Gnouc: A 2. változat amint írta, '\s ' legalább két szóközt fog egyezni egymás után, mert szóközt adott hozzá karakter a \s karaktercsoport után.
  • Igazad van ', nem ' nem látja a helyet a \s után, tévedésem.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük