Come trovare uno spazio in un testo. usando grep?


13

Come grep uno spazio nel testo?

cat a.txt| grep ' '

o

cat a.txt| grep '\s '

7
Uso gratuito di catentrambi i casi. Il primo potrebbe essere scritto grep ' ' a.txt, il secondo modificato in modo simile.
MadHatter,

1
Si noti che \scorrisponde anche a scheda, ritorno, scheda verticale, feed modulo e, tecnicamente, newline. Se si desidera abbinare solo spazio e scheda, utilizzare [[:blank:]]o [ \t].
In pausa fino a ulteriore avviso.

usando gnu grep, puoi limitare il numero di corrispondenze ( -mopzione) a uno ...
sendmoreinfo

Questo è più semplice egrep "\ s" a.txt

Risposte:


6

Se vuoi grep per un solo spazio mentre inserisci la tua domanda, useresti qualcosa del tipo:

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 linee che contengono più di uno spazio adiacente, ciò 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 i controlli delle espressioni regolari.


1
È possibile omettere tutte quelle barre rovesciate dall'ultimo esempio e migliorare la leggibilità utilizzando l' -Eopzione specificata da POSIX che abilita regex estese. grep -E '(^|[^ ]) ([^ ]|$)' a.txtIn 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 greptale comprensione \s, è possibile abbreviare l'espressione per non-spazio [^\s]a\S
In pausa fino a ulteriore avviso.

Comunque funziona anche questo, [[: blank:]]
Emax

4

Penso di averlo trovato:

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

1

La variante 2 troverà solo due spazi. Se si utilizza '\s'invece, entrambe le varianti funzioneranno.

Puoi facilmente provarlo tu stesso, quindi qual è la tua vera domanda?


1
Perché trovare solo due spazi? Penso che corrisponda a qualsiasi spazio.
cuonglm

1
@Gnouc: la variante 2 mentre scrive '\s 'corrisponderà ad almeno due spazi di fila, perché ha aggiunto un carattere spazio dopo il gruppo di caratteri \s.
Sven,

Hai ragione, non vedo lo spazio dopo \s, il mio errore.
cuonglm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.