Comment grep un espace dans le texte?

cat a.txt| grep " " 

ou

cat a.txt| grep "\s " 

Commentaires

  • Utilisation gratuite de cat dans les deux cas. Le premier pourrait être écrit grep ' ' a.txt, le second modifié de la même manière.
  • Notez que \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].
  • en utilisant gnu grep, vous pouvez limiter le nombre de correspondances (option -m) à un …
  • Ceci est plus simple egrep " \ s " a.txt

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *