Hoe één spatie in tekst grepen?
cat a.txt| grep " "
of
cat a.txt| grep "\s "
Reacties
Antwoord
Als je wilt grep voor slechts één spatie zoals u in uw vraag invoert, zou u zoiets als:
grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt
of voor POSIX-varianten gebruiken:
grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt
of de minder leesbare POSIX-variant:
grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt
Ervan uitgaande dat u regels wilt uitsluiten die meer dan één aangrenzende spatie bevatten , vereist dit expliciet dat er één spatie is, niet voorafgegaan door een spatie en niet gevolgd door een spatie.
Het is ook vermeldenswaard dat niet alle versies van grep “\ s” regelaars voor reguliere expressies ondersteunen.
Opmerkingen
- U kunt al die backslashes uit het laatste voorbeeld weglaten en de leesbaarheid verbeteren door de POSIX-gespecificeerde
-E
-optie te gebruiken die uitgebreide regexes mogelijk maakt.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
In ieder geval is de backslash vóór de spatie n ' t nodig en er ontbreekt ' een voor het laatste haakje sluiten. voor versies vangrep
die\s
begrijpen, kunt u de uitdrukking voor niet-spatie[^\s]
naar\S
- Dit werkt echter ook, [[: blank:]]
Antwoord
Ik denk dat ik het gevonden heb:
grep "\+[[:space:]]\+" a.xml
Antwoord
Variant 2 vindt slechts twee spaties. Als u "\s"
in plaats daarvan zullen beide varianten werken.
Je zou dit gemakkelijk zelf kunnen testen, dus wat is je eigenlijke vraag?
Opmerkingen
- Waarom vind je maar twee spaties? Ik denk dat het overeenkomt met elke spatie.
- @Gnouc: Variant 2 terwijl hij het schrijft
'\s '
komt overeen met ten minste twee spaties achter elkaar, omdat hij een spatie heeft toegevoegd teken na de tekengroep\s
. - Jij ' hebt gelijk, ik heb geen ' zie de spatie na
\s
, mijn fout.
cat
in beide gevallen. De eerste kan worden geschreven alsgrep ' ' a.txt
, de tweede kan op dezelfde manier worden gewijzigd.\s
ook overeenkomt met tab, return, verticaal tabblad, form feed en, technisch gezien, newline. Als je alleen spatie en tab wilt matchen, gebruik dan[[:blank:]]
of[ \t]
.-m
optie) tot één …