Come eseguire il grep di uno spazio nel testo?
cat a.txt| grep " "
o
cat a.txt| grep "\s "
Commenti
Rispondi
Se lo desideri grep per un solo spazio mentre inserisci la tua domanda, dovresti usare qualcosa come:
grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt
o per le varianti POSIX:
grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt
o la variante POSIX meno leggibile:
grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt
Supponendo di voler escludere le righe che contengono più di uno spazio adiacente , questo richiede esplicitamente che ci sia uno spazio, non preceduto da uno spazio e non seguito da uno spazio.
Inoltre, vale la pena notare che non tutte le versioni di grep supportano “\ s” i controlli delle espressioni regolari.
Commenti
- Puoi omettere tutte quelle barre rovesciate dellultimo esempio e migliorare la leggibilità utilizzando lopzione
-E
specificata da POSIX che abilita le espressioni regolari estese.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
In ogni caso, la barra rovesciata prima dello spazio non è ' necessaria e ' ne manca una prima della parentesi di chiusura finale. Inoltre, per le versioni digrep
che comprendono\s
, puoi abbreviare lespressione per non-spazio[^\s]
a\S
- Tuttavia anche questo funziona, [[: blank:]]
Risposta
Penso di averlo trovato:
grep "\+[[:space:]]\+" a.xml
Risposta
La variante 2 troverà solo due spazi. Se utilizzi "\s"
invece, entrambe le varianti funzioneranno.
Potresti facilmente testarlo tu stesso, quindi qual è la tua vera domanda?
Commenti
- Perché trovare solo due spazi? Penso che corrisponda a qualsiasi spazio.
- @Gnouc: la variante 2 come la scrive
'\s '
corrisponderà ad almeno due spazi di fila, perché ha aggiunto uno spazio carattere dopo il gruppo di caratteri\s
. - ' hai ragione, io non ' t vedere lo spazio dopo
\s
, errore mio.
cat
in entrambi i casi. Il primo potrebbe essere scrittogrep ' ' a.txt
, il secondo modificato in modo simile.\s
corrisponde anche a tab, return, scheda verticale, avanzamento modulo e, tecnicamente, nuova riga. Se desideri far corrispondere solo spazio e tabulazione, utilizza[[:blank:]]
o[ \t]
.-m
) a uno …