Оператор условного тестирования Bash [[
может сравнивать имена файлов с регулярным выражением и извлекать выражения в скобках:
shopt -s nocaseglob
for f in *booklets*
do
[[ $f =~ ([[:digit:]]+)[^[:digit:]]?booklets ]] && echo "${BASH_REMATCH[1]}"
done
Это зациклится на каждом файле, который содержит (регистрозависимое -нечувствительное )слово "буклеты" в текущем каталоге. Если вы хотите, чтобы что-то выполнялось одновременно с одним файлом, вы можете упростить описанное выше и поместить это в скрипт или функцию :
.extractnumber ()
(
shopt -s nocaseglob
if [ ! -f "$1" ]; then echo "File $1 not found!"; return 1; fi
[[ $1 =~ ([[:digit:]]+)[^[:digit:]]?booklets ]] && echo "${BASH_REMATCH[1]}";
)
... и затем назовите его:
$ extractnumber 35BOOKLETS.pdf
35
$ extractnumber MATH232\ Exam\ 01\ 99\ booklets.pdf
99
$ extractnumber 101s18-exam02--100-booklets.pdf
100
$ extractnumber foobar
File foobar not found!
Вместо этого вы можете использовать идентификатор пользователя. Это работает как в интерактивном режиме, так и с использованием параметров командной строки
.man top
-u | -U :User-filter-mode as: -u | -U number or name
Display only processes with a user id or user name matching that given.