Как выбрать только числа из имен файлов в bash с помощью регулярного выражения

Хотя я не нашел способа переназначить Fn + F4 , я обнаружил, что Fn + 4 (например, обычная цифровая клавиша) работает по умолчанию для запуска приостановки в ОЗУ.

2
31.03.2018, 07:37
2 ответа

Ваш шаблон Regex ничему не соответствует, потому что он пытается сопоставить два / , которые являются разделителями каталогов для * nix, и ни одно имя файла не будет содержать этого. Я предполагаю, что /.../ g исходит из вашей практики JavaScript (или другого) Regex, нет?

Do:

for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done

bash Regexp не поддерживает \ d ключевое слово для класса символов [0-9] .Так что лучше использовать [0-9] , если вы хотите полагаться на свой локаль , используйте класс символов [: digit:] :

for i in *.jpg; do [[ $i =~ ([[:digit:]]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done

Пример:

$ for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
123
12
1
4
27.01.2020, 22:03

Изменение вывода ls папки, содержащей файлы:

ls SNAFU* | sed -e 's/SNAFU\|.jpg//g'
0
27.01.2020, 22:03

Теги

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