Come eseguire il grep di uno spazio nel testo?

cat a.txt| grep " " 

o

cat a.txt| grep "\s " 

Commenti

  • Uso gratuito di cat in entrambi i casi. Il primo potrebbe essere scritto grep ' ' a.txt, il secondo modificato in modo simile.
  • Tieni presente che \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].
  • Utilizzando gnu grep, puoi limita il numero di corrispondenze (opzione -m) a uno …
  • Questo è più semplice egrep " \ s " a.txt

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 di grep 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *