[Перевод] Bash-скрипты, часть 9: регулярные выражения
Комментарии (6)
3 мая 2017 в 15:10
0↑
↓
Не используйте регулярку для проверки email из этой статьи. Она неправильная3 мая 2017 в 15:16 (комментарий был изменён)
0↑
↓
Для того, чтобы это сделать, понадобится, для начала, сформировать список путей к директориям. Сделаем это с помощью sed, заменив двоеточия на пробелы
$ echo $PATH | sed 's/:/ /g'
Я чуть не расплакался со смеху, сабшел, да ещё и sed для этого… Не удержался, простите. Невероятно что себе некоторые люди позволяют публиковать.echo ${PATH//:/ } #всё
3 мая 2017 в 15:30
0↑
↓
Они тут ещё пути по пробелам делят. Вспомнил сколько в моём $PATH из cygwin пробелов… По‐хорошему нужно устраивать
while
цикл с${PATH%%:*}
, раз уж доtypeset -T
bash не доросла (возможность zsh, позволяет связать скалярный (читай строковый) параметр, содержащий разделённый некоторым символом список, с параметром‐списком).3 мая 2017 в 15:35
0↑
↓
Хотя нет, тут должно быть что‐то с временной установкой IFS=: и созданием спискового параметра:
saved_ifs="$IFS" IFS=: path=( $PATH ) IFS=$saved_ifs for p in "${path[@]}" ; do … done
И никаких регулярных выражений вообще.
3 мая 2017 в 15:39
0↑
↓
Да понятное дело что пути с пробелами в указаном примере тут же сломаются и что вообще весь этот пример можно переписать в однострочник через find. Я просто выдернул из статьи уже просто режущее глаза выражение.Подумайте чего только стоит упоминание о регексах, если читателей заранее не проинформировали что в баше есть понятие glob. Скольким кол-вом отстреленых конечностей закончится попытка применения регексов в баше напрямую — я думать просто не хочу.
P.S. Если кому-то не понравился тон предыдущего сообщения, прошу понять что я (и не только) уже неоднократно критиковал неточности и неверную информацию в статьях этого цикла. Но вот это, ровно как и регекс для мейла на который обратил внимание redfs, уже настоящий антипаттерн учащий читателей плохому. Такое на хабре, ИМХО, вообще появляться не должно.
3 мая 2017 в 16:11
0↑
↓
Кстати, в linux используют два основных движка регулярных выражений — glibc и libpcre. ERE и BRE — это диалекты, предоставляемые одним движком glibc, если только авторы утилиты не решили реализовать регулярные выражения сами. Многие программы (тот же grep) могут использовать, на выбор, ERE, BRE и PCRE (хотя последнее обычно можно отключить при компиляции).