Si vous souhaitez supprimer un certain NUMÉRO des composants du chemin, vous devez utiliser cut
con -d'/'
. Par exemple, si path=/home/dude/some/deepish/dir
:
Pour retirer les deux premiers composants :
# (Add 2 to the number of components to remove to get the value to pass to -f)
echo $path | cut -d'/' -f4-
# output:
# some/deepish/dir
Pour conserver les deux premiers éléments :
echo $path | cut -d'/' -f-3
# output:
# /home/dude
Pour retirer les deux derniers composants ( rev
inverse la chaîne) :
echo $path | rev | cut -d'/' -f4- | rev
# output:
# /home/dude/some
Pour conserver les trois derniers éléments :
echo $path | rev | cut -d'/' -f-3 | rev
# output:
# some/deepish/dir
Ou si vous souhaitez supprimer tout ce qui se trouve avant un composant particulier, sed
fonctionnerait :
echo $path | sed 's/.*\(some\)/\1/g'
# output:
# some/deepish/dir
Ou après un composant particulier :
echo $path | sed 's/\(dude\).*/\1/g'
# output:
# /home/dude
C'est encore plus facile si vous ne voulez pas conserver le composant que vous spécifiez :
echo $path | sed 's/some.*//g'
# output:
# /home/dude/
Et si vous voulez être cohérent, vous pouvez également faire correspondre la barre oblique finale :
echo $path | sed 's/\/some.*//g'
# output:
# /home/dude
Bien sûr, si vous faites correspondre plusieurs barres obliques, vous devez changer l'option sed
délimiteur :
echo $path | sed 's!/some.*!!g'
# output:
# /home/dude
Notez que ces exemples utilisent tous des chemins d'accès absolus, vous devrez jouer pour les faire fonctionner avec des chemins d'accès relatifs.