GNU/Linux >> Tutoriels Linux >  >> Linux

Expression régulière avec sed

Votre principal problème est que vous essayez d'utiliser / comme séparateur, quand / est également un caractère que vous allez analyser.

Vous devrez utiliser un séparateur différent, comme un tuyau. Faites correspondre tout et un / , puis utilisez \( et \) (groupes de capture) délimitant la partie que vous souhaitez extraire, et utilisez \1 , rendant ce groupe :

echo "yourstring" | sed 's|.*/\([^/]*\)$|\1|'

Vous pouvez le faire fonctionner sans groupes de capture :il suffit de tout laisser tomber jusqu'au dernier / :

echo "yourstring" | sed 's|.*/||'

Pourquoi ne pas utiliser basename pour ça? Par exemple :

for file in *mp3; do basename "$file"; done

Linux
  1. Pourquoi `\d` ne fonctionne-t-il pas dans les expressions régulières de sed ?

  2. Utilisation de sed pour diviser une chaîne avec un délimiteur

  3. sed insérer une ligne avec des espaces sur une ligne spécifique

  4. Comment supprimer le caractère \r avec sed

  5. Renommeur de fichiers d'expressions régulières de l'interface graphique Linux (avec substitution)

Initiation aux expressions régulières

Utilisation de plusieurs modèles à la fois avec la commande Sed

Comment atteindre la portabilité avec Sed -i (édition sur place) ?

Ajout avec "sed" ?

La définition d'une expression régulière ?

10 exemples pratiques de regex avec grep