9
votes

Comment supprimer le dernier répertoire d'un chemin avec SED?

Comment supprimer le dernier Dir avec sed code> (non DirName code>), comme celui-ci:

echo "/dir1/dir2/dir3/dir4" | sed .....


0 commentaires

4 Réponses :


10
votes
sed 's,/*[^/]\+/*$,,'
If it's part of the shell script, then dirname will be definitely more clear.

3 commentaires

Cela ne fonctionne pas si le répertoire a un "". (période) dans son nom


@Chriris hein? Pourquoi tu as écrit? Echo A.B / C.D / E.F | SED 'S, / * [^ /] \ + / * $ ,' ' renvoie a.b / c.d ou ce n'est pas dans votre version SED? My Regexp n'a rien à voir avec . du tout.


Dirname a des problèmes avec "." Dans le nom du dir, la regex fonctionne bien.



4
votes
/etc1/etc2/etc3

1 commentaires

Oups, utilisant des virgules comme le délimiteur comme Przemoc indiqué serait mieux pour éviter d'avoir à échapper aux barres obliques dans le script, ce qui la rend plus lisible. Je fais toujours cette erreur.



31
votes

Vous n'avez pas à utiliser des outils externes

$ a = "/ dir1 / dir2 / dir3 / dir4"

$ echo $ {A% / *}


2 commentaires

Bien que la réponse actuellement acceptée soit définitivement bonne, je pense que celui-ci devrait être la réponse acceptée si la question concerne Bash. Substitution des paramètres Bash ressent juste plus «vrai» Bash que SED.


Il ne peut pas être utilisé pour une entrée en continu, cependant.



5
votes

Vous pouvez utiliser la commande "DirName" Shell: XXX


0 commentaires