Безопасно ли удалять файлы из /var/crash

За исключением ksh93, ни одна из обычных оболочек не имеет регулярных выражений с таким же синтаксисом, как sed, awk и т.д., которые можно использовать для поиска файлов.

Ksh93, bash и zsh имеют регулярные выражения с другим синтаксисом, обратно совместимым с globs:

  • ? соответствует любому одиночному символу (как . в обычном синтаксисе regexp)
  • [...] соответствует набору символов в основном таким же образом
  • *(FOO) соответствует любому количеству вхождений FOO (например. (FOO)* в обычном синтаксисе regexp)
  • аналогично +(FOO) соответствует одному или более вхождений, и ? (FOO) соответствует нулю или одному вхождению
  • @(FOO|BAR) соответствует либо FOO либо BAR
  • Матчи применяются ко всей строке, а не к подстроке; если вам нужна подстрока, поставьте * в начале и в конце

Этот синтаксис нужно активировать с помощью shopt -s extglob в bash и с помощью setopt ksh_glob в zsh. Поэтому в bash вы напишете

shopt -s extglob
ls a*(k)

См. также Почему мое регулярное выражение работает в X, но не в Y?

Кш93, zsh и bash могут выполнять сопоставление регулярных выражений с расширенными регулярными выражениями (в основном синтаксис awk) для строк, с помощью оператора =~ конструкции [[ ... ]]. Это не очень удобно для листинга файлов, но если очень хочется, то это можно сделать.

shopt -s dotglob  # <<< include dot files, for bash
setopt globdots   # <<< include dot files, for zsh
FIGNORE='@(.|..)' # <<< include dot files, for ksh
for x in *; do
  if [[ $x =~ ^ak*$ ]]; then
    …
  fi
done

7
20.12.2017, 01:30
0 ответов

Теги

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