GNU/Linux >> Tutoriels Linux >  >> Linux

Confus à propos de la limite des mots ?

J'ai fait beaucoup de recherches là-dessus, mais je ne suis toujours pas clair là-dessus. Que signifie limite de mots moyenne? À quoi ça sert ?

Donc, par exemple, quelqu'un pourrait-il m'expliquer cette commande s'il vous plaît ?

egrep 'b[A-Z]+b' filename.sh

Réponse acceptée :

Comme décrit ici, par exemple, il correspond à entre mots :

Il existe trois positions différentes qui sont considérées comme des limites de mots :

  1. Avant le premier caractère de la chaîne, si le premier caractère est un caractère de mot.
  2. Après le dernier caractère de la chaîne, si le dernier caractère est un caractère de mot.
  3. Entre deux caractères dans la chaîne, où l'un est un caractère de mot et l'autre n'est pas un caractère de mot.

Voici des exemples de chacun de ces cas :

  1. Pour la chaîne foobar , le premier cas correspond

     foobar
    ^-----here
    
  2. Pour la chaîne foobar , le deuxième cas correspond

    foobar
          ^--here
    
  3. Pour la chaîne foo bar , le troisième cas correspondra

    foo bar
       ^--here, because space is not a word character
    

Ce qui est considéré comme un caractère de mot dépend de l'implémentation spécifique de l'expression régulière. Dans tous les cas cependant, les lettres ([a-z] et [A-Z] ), chiffres ([0-9] ) et _ sont considérés comme des caractères de mot.

Ainsi, l'exemple de regex que vous avez posté (b[A-Z]+b ) signifie trouver la chaîne la plus longue qui se trouve entre deux limites de mots et qui se compose uniquement de lettres majuscules. Il serait peut-être plus simple d'expliquer par un exemple :

echo "FOOBAR" | egrep 'b[A-Z]+b'   # Works
echo "FOO BAR" | egrep 'b[A-Z]+b'  # Works
echo "aFOOBARb" | egrep 'b[A-Z]+b' # Does not work, we want capitals only
echo "12345" | egrep 'b[A-Za]+b'   # Does not work, no letters
echo "1FOOBAR2" | egrep 'b[A-Z]+b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep 'b[A-Z]+b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep 'b[A-Z]+b' # Works, # and $ are not word chars

Linux
  1. Ascii étendu sous Linux

  2. Ajouter une nouvelle ligne à la chaîne, multiplateforme

  3. Comment dérouler un texte de 80 caractères

  4. Échappez un caractère étoile (*) dans bash

  5. Plusieurs questions sur l'encodage des caractères du système de fichiers sous Linux

Tutoriel de programmation en C Partie 5 - Variables de caractères

[Critique] Pear OS 8 :Tout est question d'apparence

Confus à propos de Grep et du * joker ?

À propos de MySQL

À propos de PHP

Confus à propos de stdin, stdout et stderr ?