Je ne parviens pas à faire fonctionner correctement la regex sed ([^/]+)
.
Au lieu de renvoyer toutes les barres obliques, il n’en retourne qu’une.
Commander:
echo '/test/path/file.log' | sed -r 's|^.*([^/]+)/(.*)$|\1.\2|g'
Attendu:
path.file.log
Résultat:
h.file.log
Aussi essayé cela, mais a obtenu le même résultat:
echo '/test/path/file.log' | sed -r 's|^.*([^/]{1,})/(.*)$|\1.\2|g'
Le problème n’est pas avec [^/]+
, mais avec le précédent .*
. .*
est gourmand et consumra un maximum d’intrants. Ma suggestion habituelle serait d’utiliser .*?
pour le rendre non gourmand, mais les expressions rationnelles POSIX ne supportent pas cette syntaxe.
S’il y a toujours une barre oblique, vous pouvez en append une au regex pour l’empêcher de consumr trop.
$ echo '/test/path/file.log' | sed -r 's|^.*/([^/]+)/(.*)$|\1.\2|g' path.file.log
Les systèmes d’exploitation utilisent différentes versions de sed
. Certaines versions de sed
utilisent par défaut la syntaxe de base de regexp; Si vous avez besoin d’une syntaxe d’expressions rationnelle étendue ( +
est l’une de ces fonctionnalités), vous devez changer d’option avec -E
.