Trattare con spazi bianchi in grep


3

Sto cercando di capire come affrontare gli spazi bianchi in grep. Come posso dire grep trovare stringhe contenenti spazi bianchi o schede? Il manuale non mi dice nulla. \s sembra funzionare per gli spazi bianchi, e \S sembra funzionare per spazi non bianchi, ma include tutti i caratteri di spazi bianchi (spazi E tabulazioni) e non funziona se lo metto tra parentesi, trattando il backslash e il \s come personaggi separati.


1
Dovrai essere più chiaro con la tua domanda. Magari inserire un esempio di dati e ciò che ci si aspetta che corrisponda.
nik

Sì, non è del tutto chiaro cosa intendi. Cosa ti piacerebbe fare esattamente? E cosa vuol dire che hai messo "tra parentesi, trattando la barra rovesciata e la s come caratteri separati"?
ShankarG

3
"spazi bianchi o schede"? Tabs siamo spazi bianchi.
grawity

Risposte:


5

Sei sicuro di questo?

$ printf "a \tb\na b\na\tb" | grep '.\s*.'
a       b
a b
a       b

$ grep -V
grep (GNU grep) 2.14
Copyright (C) 2012 Free Software Foundation, Inc.

I.e. come mostrato, \s ha abbinato sia spazi che tabulazioni - Ho incluso "a" e "b" solo per evidenziarlo.

Che cosa ottieni?


-1, se potessi: .\s*. anche le partite .., cioè, qualsiasi due caratteri - e poiché tutte le tue stringhe hanno due caratteri, grep corrisponderà a tutti loro. Dovrebbe aver usato .\s+..
muru

@muru, per favore leggi attentamente la domanda prima di fare -1. Hai completamente perso il punto. Questa non è una domanda riguardo \s* o \s+. L'OP pensa che \s non funziona, sto solo sottolineando che sta funzionando bene. In secondo luogo, prova i tuoi risultati prima di pubblicare qualsiasi cosa. Hai provato a correre printf "a \tb\na b\na\tb" | grep '.\s+.' prima di pubblicare? Sai perché non funziona? -- dovresti usare -E ma non l'ha menzionato. La prossima volta, ti preghiamo di pensarci due volte prima di mostrarti come ti chiami.
xpt

Mi pento di quello che ho detto dopo il raffreddamento. È stata una giornata lunga e faticosa. Scusate.
xpt

OK, dopo essermi calmato, hai notato il tuo errore? (Non posso fare un -1, a proposito)
muru

Ho ricontrollato tutto prima di pubblicare e ho chiarito i miei punti. Fine della discussione.
xpt

2

Nella mia esperienza, grep funziona meglio con le classi di caratteri POSIX, per esempio [[: space:]]. Uso estesamente grep in alcuni programmi per la convalida dell'input dell'utente e non ho mai avuto problemi se mi sono attenuto alle classi POSIX.

Tuttavia, come hanno notato i commentatori, la tua domanda non è completamente chiara.

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.