Hogyan lehet egy helyet megfogni a szövegben?
cat a.txt| grep " "
vagy
cat a.txt| grep "\s "
Megjegyzések
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. agrep
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.
cat
mindkét esetben indokolatlan használata. Az elsőt meg lehet írnigrep ' ' a.txt
, a másodikat hasonlóan lehet módosítani.\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.-m
opció) egyre …