[Перевод] 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 (хотя последнее обычно можно отключить при компиляции).

© Habrahabr.ru