регулярное выражение в `/ bin / sh` shell

Я хотел бы удалить все файлы, заканчивающиеся заданным набором расширений в определенном каталоге в оболочке /bin/sh . С помощью /bin/bash я могу сделать это с помощью regex следующим образом:

 rm path/(*.pdf|*.png) 

но это, похоже, не работает с обычным sh. Это нормально? Есть ли support регулярных выражений?

3 Solutions collect form web for “регулярное выражение в `/ bin / sh` shell”

Нет, это не будет работать в строго совместимой с POSIX оболочке. Вот нормативная ссылка:

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_03

Как вы можете видеть, определенно нет регулярных выражений, и даже не обозначать скобки {a, b}.

Как указано в ответе user3188445, это не соответствует POSIX.

Однако, если вы все равно хотите это сделать, вам нужно использовать другой инструмент, например find :

 find dir/ -maxdepth 1 -type f -regex ".*.pdf\|.*.png" -delete 

find поиск в -maxdepth 1 dir/ , а не рекурсивно ( -maxdepth 1 ), найден только файл ( -type f ). Регулярное выражение соответствует файлам .pdf и .png и -delete удаляет найденные файлы.

Чтобы проверить, какая оболочка вы действительно используете с / bin / sh, вызовите:

 /bin/sh whatshell.sh 

и выберите сценарий whatshell с этой страницы:

http://www.in-ulm.de/~mascheck/various/whatshell/

звоните, например, wget http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh

Типичный выход:

 $ sh whatshell.sh SVR4 Bourne shell (SunOS 5 variant) $ bosh whatshell.sh SVR4 Bourne shell (SunOS 5 schily variant) $ bash whatshell.sh bash 3.2.25(1)-release $ ksh whatshell.sh ksh88 Version (..-)11/16/88i $ ksh93 whatshell.sh ksh93 Version M 1993-12-28 s+ 

POSIX не требует оболочки POSIX в / bin / sh. Если вам нравится запускать вызов оболочки POSIX:

 PATH=`getconf PATH` export PATH sh 

обратите внимание, что если это приведет к запуску bash, оболочка не будет совместима с POSIX.

  • Регулярное выражение для проверки только чисел присутствует после подчеркивания не символов
  • Как использовать подстановочные знаки (*) при копировании с помощью scp?
  • Unix: Что произойдет, если я введу ls -d *
  • Используйте расширенное подтачивание Bash, чтобы свести на нет имя файла, начинающегося с точки
  • Передача подстановочного символа * в скрипт (bash?)
  • Количество файлов в каталоге, начиная с определенного текста
  • Перемещение файлов без расширения с помощью mv
  • Что делает `mv ./*` без указания адресата?
  • Разделение большого дерева каталогов по типу файла
  • Содержит ли * скрытые файлы в tar, даже если dotglob не установлен?
  • Запретить расширение подстановочных знаков при поиске
  • Linux и Unix - лучшая ОС в мире.