перечислите файлы без расширений с обеих сторон в оболочке bash, но сохраните исходные файлы

Подробную информацию о поддерживаемых регулярных выражениях для 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**
0
18.12.2019, 12:15
2 ответа

Предполагая, что вы находитесь в том же каталоге, что и ваши файлы:

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

Эти два цикла не переименовывают файлы.

2
28.01.2020, 02:21

Я предполагаюrename(perl-renameна некоторых системах, просто renameна других )здесь проще всего:

rename 's/^awstats\.//;s/\.conf$//' awstats.*.conf

Объяснение регулярного выражения:

  • s/^awstats\.//заменить awstats.в начале строки (имя файла )ничем
  • s/\.conf$//заменить .confв конце строки (имя файла )ничем

Используйте опцию -nдля пробного -прогона!

1
28.01.2020, 02:21

Теги

Похожие вопросы