Во-первых, вам нужно указать шаблон для sed
. Затем вам нужно избежать точки, чтобы она воспринималась буквально. Таким образом, попробуйте это:
echo fooap.p | sed 's/\.p//'
Последнее g
в вашем коде лишнее.
Сzsh
(ваш скрипт уже имеет синтаксис zsh
, а не bash
, так как вы не цитируете расширения параметров):
autoload zmv # best in ~/.zshrc
zmodload zsh/files # makes mkdir and mv (and a few other file manipulation
# utilities) builtin to speed things up.
mkmv() { mkdir -p -- $2:h && mv -- "$@"; }
(
cd -P -- "$FILES" &&
zmv -P mkmv '([A-Z0-9](#c4))_*.dlg' '$1/$f'
)
Где [A-Z0-9](#c4)
соответствует 4 английским заглавным буквам (и в zsh
, только им, а не Ŕ
, Æ
, и т. д., которые обычно включают другие оболочки )или десятичные цифры (и опять же, только они, а не
²
, ,
... которые, например,
bash
будут включать ).
Обратите внимание, что ваш [0-9]*_*.dlg
является не регулярным выражением, это подстановочный знак оболочки, который соответствует именам файлов, начинающимся с одного символа в диапазоне от 0
до 9
(, который in bash
включает сотни символов в большинстве локалей ), за которыми следует любое количество символов (*
), за которыми следует _
, за которым следует любое количество символов, за которыми следует .dlg
. Эквивалент регулярного выражения будет ^[0-9].*_.*\.dlg$
.