Tout d'abord, je dois dire que le moyen le plus simple de le faire est d'utiliser les commandes prename ou renommer.
Sur Ubuntu, OSX (package Homebrew, package rename
MacPorts p5-file-rename
) ou d'autres systèmes avec un renommage perl (prename):
rename s/0000/000/ F0000*
ou sur les systèmes renommés de util-linux-ng, tels que RHEL:
rename 0000 000 F0000*
C'est beaucoup plus compréhensible que la commande sed équivalente.
Mais pour comprendre la commande sed, la page de manuel sed est utile. Si vous exécutez man sed et recherchez & (en utilisant la commande / pour rechercher), vous trouverez qu'il s'agit d'un caractère spécial dans s / foo / bar / remplacements.
s/regexp/replacement/
Attempt to match regexp against the pattern space. If success‐
ful, replace that portion matched with replacement. The
replacement may contain the special character & to refer to that
portion of the pattern space which matched, and the special
escapes \1 through \9 to refer to the corresponding matching
sub-expressions in the regexp.
Par conséquent, \(.\)
correspond au premier caractère, qui peut être référencé par \1
. Puis .
correspond au caractère suivant, qui est toujours 0. Puis \(.*\)
correspond au reste du nom de fichier, qui peut être référencé par \2
.
La chaîne de remplacement met tout cela ensemble en utilisant &
(le nom de fichier d'origine) et \1\2
qui est chaque partie du nom de fichier à l'exception du 2ème caractère, qui était un 0.
C'est une façon assez cryptique de faire cela, à mon humble avis. Si pour une raison quelconque la commande renommer n'était pas disponible et que vous vouliez utiliser sed pour faire le changement de nom (ou peut-être que vous faisiez quelque chose de trop complexe pour renommer?), Être plus explicite dans votre regex la rendrait beaucoup plus lisible. Peut-être quelque chose comme:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
Être capable de voir ce qui change réellement dans le s / search / replacement / le rend beaucoup plus lisible. De plus, il ne continuera pas à aspirer les caractères de votre nom de fichier si vous l'exécutez accidentellement deux fois ou quelque chose du genre.