Comment trouver un espace dans un texte. en utilisant grep?


13

Comment grep un espace dans le texte?

cat a.txt| grep ' '

ou

cat a.txt| grep '\s '

7
Utilisation gratuite de catdans les deux cas. Le premier pourrait être écrit grep ' ' a.txt, le second modifié de la même manière.
MadHatter

1
Notez que cela \scorrespond également à tabulation, retour, onglet vertical, saut de page et, techniquement, à la nouvelle ligne. Si vous ne souhaitez faire correspondre que l'espace et la tabulation, utilisez [[:blank:]]ou [ \t].
pause jusqu'à nouvel ordre.

en utilisant gnu grep, vous pouvez limiter le nombre de correspondances ( -moption) à un ...
sendmoreinfo

C'est plus simple egrep "\ s" a.txt

Réponses:


6

Si vous voulez rechercher un seul espace pendant que vous posez votre question, vous utiliseriez quelque chose comme:

grep -e '^\s[^\s]' -e '[^\s]\s$' -e '[^\s]\s[^\s]' a.txt

ou pour les variantes POSIX:

grep -e '^ [^ ]' -e '[^ ] $' -e '[^ ] [^ ]' a.txt

ou la variante POSIX moins lisible:

grep '\(^\|[^ ]\)\ \([^ ]\|$)' a.txt

En supposant que vous souhaitez exclure les lignes qui contiennent plusieurs espaces adjacents, cela nécessite explicitement qu'il y ait un espace, non précédé d'un espace et non suivi d'un espace.

En outre, il convient de noter que toutes les versions de grep ne prennent pas en charge les contrôles d'expressions régulières '\ s'.


1
Vous pouvez omettre toutes ces barres obliques inverses du dernier exemple et améliorer la lisibilité en utilisant l' -Eoption spécifiée POSIX qui permet des expressions régulières étendues. grep -E '(^|[^ ]) ([^ ]|$)' a.txtDans tous les cas, la barre oblique inverse avant l'espace n'est pas nécessaire et il en manque une avant la dernière parenthèse fermante. En outre, pour les versions de grepcette compréhension \s, vous pouvez raccourcir l'expression pour non-espace [^\s]à\S
pause jusqu'à nouvel ordre.

Cependant cela fonctionne aussi, [[: blank:]]
Emax

4

Je pense que je l'ai trouvé:

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

1

La variante 2 ne trouvera que deux espaces. Si vous utilisez à la '\s'place, les deux variantes fonctionneront.

Vous pouvez facilement tester cela vous-même, alors quelle est votre véritable question?


1
Pourquoi ne trouver que deux espaces? Je pense que cela correspond à n'importe quel espace.
cuonglm

1
@Gnouc: La variante 2, comme il l'écrit '\s ', correspondra à au moins deux espaces consécutifs, car il a ajouté un caractère espace après le groupe de caractères \s.
Sven

Tu as raison, je ne vois pas l'espace après \s, mon erreur.
cuonglm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.