2010-07-04 7 views
0

Comment remplacer lesed + remplacer mot sur le répertoire PATH

<x> 

avec le mot Before_last_dir uniquement sur le répertoire que situé avant le dernier dir (selon cet exemple - DIR4)

echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" |sed s"/<x>/Before_last_dir/g" 

Une autre exemple

echo "/dirA<x>/dirB<x>/dirC<x> >" |sed s"/<x>/Before_last_dir/g" 

devrait être

/dirA<x>/dirBBefore_last_dir/dirC<x> 

Répondre

1
$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed -E "s/<x>(\/[^\/]+)$/Before_last_dir\1/g" 
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x> 

(-E signifie sed utilise des expressions régulières POSIX)

Alternativement, sans -E (comme -E peut ne pas être disponible sur certains systèmes):

$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed "s/<x>\(\/[^\/]\{1,\}\)$/Before_last_dir\1/" 
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x> 

Cette devrait travailler partout. (EDIT: changé l'opérateur "+" en POSIX "{1,}" puisque "+" est une extension GNU, pas en POSIX

+0

-E ne supporte pas certains linux – yael

+0

@Tom: C'est bizarre, ça marche pour moi (Linux Fedora 13) juste comme affiché ici Cela peut être un problème avec sed - utilisez-vous une autre version que GNU sed? Ici: GNU sed version 4.2.1; GNU bash, version 4.1.7 (1) -release (i386-redhat-linux-gnu) – imploder

+0

J'ai supprimé le commentaire parce que j'ai trouvé le vôtre bon –

Questions connexes