Comment grep un espace dans le texte?
cat a.txt| grep " "
ou
cat a.txt| grep "\s "
Commentaires
Réponse
Si vous le souhaitez grep pour un seul espace lorsque vous mettez 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 la moins lisible:
grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt
En supposant que vous souhaitiez exclure les lignes contenant plus dun espace adjacent , cela nécessite explicitement quil y ait un espace, non précédé dun espace et non suivi dun espace.
De plus, il est intéressant de noter que toutes les versions de grep ne prennent pas en charge les contrôles dexpressions régulières « \ s ».
Commentaires
- Vous pouvez omettre toutes ces barres obliques inverses du dernier exemple et améliorer la lisibilité en utilisant loption
-E
spécifiée par POSIX qui active les expressions régulières étendues.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
Dans tous les cas, la barre oblique inverse avant lespace nest ' t nécessaire et il manque un ' avant la parenthèse de fermeture finale. De plus, pour les versions degrep
qui comprennent\s
, vous pouvez raccourcir lexpression pour labsence despace[^\s]
à\S
- Cependant, cela fonctionne aussi, [[: blank:]]
Réponse
Je pense que je lai trouvé:
grep "\+[[:space:]]\+" a.xml
Réponse
La variante 2 ne trouvera que deux espaces. Si vous utilisez "\s"
à la place, les deux variantes fonctionneront.
Vous pouvez facilement le tester vous-même, alors quelle est votre question réelle?
Commentaires
- Pourquoi ne trouver que deux espaces? Je pense quil correspond à nimporte quel espace.
- @Gnouc: La variante 2 telle quil lécrit
'\s '
correspondra à au moins deux espaces daffilée, car il a ajouté un espace caractère après le groupe de caractères\s
. - Vous ' êtes à droite, je ne ' t voir lespace après
\s
, mon erreur.
cat
dans les deux cas. Le premier pourrait être écritgrep ' ' a.txt
, le second modifié de la même manière.\s
correspond également à tab, return, onglet vertical, saut de formulaire et, techniquement, nouvelle ligne. Si vous ne voulez faire correspondre que lespace et la tabulation, utilisez[[:blank:]]
ou[ \t]
.-m
) à un …