Подробную информацию о поддерживаемых регулярных выражениях для BSD grep см. в man 7 re_format
. В частности, говорится:
A bound is `{' followed by an unsigned decimal integer, possibly followed
by `,' possibly followed by another unsigned decimal integer, always fol-
lowed by `}'. The integers must lie between 0 and RE_DUP_MAX (255=)
inclusive, and if there are two of them, the first may not exceed the
second.
Можно опустить только второе число; первый должен быть задан .
С этим исправлением:
$ /usr/bin/grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ /usr/bin/grep -Eo '\*\*[^*]{0,20}\*\*' foo
**circumstance**
**case**
**condition**
**Anxiety**
**anxiety**
Предполагая, что вы находитесь в том же каталоге, что и ваши файлы:
for name in awstats.*.conf; do
basename "${name#awstats.}".conf
done
Код внутри цикла сначала удалит префикс awstats.
из $name
с помощью стандартной подстановки параметров, а затем позволит basename
обрезать суффикс .conf
.
Вы также можете сделать это в два этапа без вызоваbasename
:
for name in awstats.*.conf; do
newname=${name#awstats.} # trim off prefix
newname=${newname%.conf} # trim off suffix
printf '%s\n' "newname"
done
Эти два цикла не переименовывают файлы.
Я предполагаюrename
(perl-rename
на некоторых системах, просто rename
на других )здесь проще всего:
rename 's/^awstats\.//;s/\.conf$//' awstats.*.conf
Объяснение регулярного выражения:
s/^awstats\.//
заменить awstats.
в начале строки (имя файла )ничем s/\.conf$//
заменить .conf
в конце строки (имя файла )ничем Используйте опцию -n
для пробного -прогона!