Во-первых, я должен сказать, что самый простой способ сделать это - использовать команды или переименовать.
В Ubuntu, OSX (Доморощенный пакет rename
, MacPorts пакет p5-file-rename
), или другие системы с Perl переименованью (prename):
rename s/0000/000/ F0000*
или на системы с переименованью из Util-Linux-нг, такие как RHEL :
rename 0000 000 F0000*
Это намного понятнее, чем эквивалентная команда sed.
Но что касается понимания команды sed, полезно использовать справочную страницу sed. Если вы управляете человеком и ищете & (с помощью команды/для поиска), вы найдете специальный символ в s/foo/bar/replacement.
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.
Поэтому \(.\)
соответствует первому символу, который может быть, на который ссылается \1
. Затем .
соответствует следующему символу, который всегда равен 0. Тогда \(.*\)
соответствует остальной части имени файла, на который ссылаются \2
.
Строка замены помещает все вместе, используя &
(оригинал имени файла) и \1\2
которое каждая часть имени файла, за исключением 2-го символа, который был 0.
Это довольно загадочным способ его сделай это, ИМХО. Если для по какой-то причине команда переименования недоступна, и вы хотели использовать команду , чтобы сделать переименование (или, возможно, вы делали что-то слишком сложное для переименования?), Будучи более явным в вашем регулярном выражении, это сделало бы это намного более читаемым , Возможно, что-то вроде:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
Будучи в состоянии увидеть, что на самом деле меняется в с/поиска/замены/делает его гораздо более удобным для чтения. Также он не будет содержать сосать символы из вашего имени файла, если вы случайно запустили его дважды или что-то в этом роде.
См. Также: [Изменение расширений файлов с помощью sed] (https: // stackoverflow.com/questions/44620236/change-file-extensions-with-sed/44620449 # 44620449) – agc