Может ли кто-нибудь объяснить подстроку bash, соответствующую мне?

Я хорошо знаком с регулярными выражениями в разных контекстах, но подстрока bash меня просто сбивает с толку. Может кто-нибудь, пожалуйста, объясните мне это, в идеале, с некоторыми примерами? Примеры, которые я нашел в google, очень просты и предлагают довольно общее (если ограничено) соответствие регулярному выражению, но когда я пытаюсь использовать их в практических ситуациях, он никогда не работает. По моему пониманию подстрока должна работать следующим образом:

result=${string##pattern} 

найдет самую длинную подстроку «string», начиная с ее начала, которая соответствует «pattern». Он удаляет это совпадение из 'string' и помещает остаток в 'result'. Но учтите:

 temp=${myvar##[^0-9]*} && echo $temp 

Насколько я могу судить, мой шаблон должен соответствовать «ноль или больше символов, которые не являются цифрами» – самый длинный из таких совпадений с начала строки. Затем возьмите пример:

 myvar=my_file_123_45.txt 

Я должен ожидать, что символы «my_file_» будут сопоставляться: это самая длинная комбинация символов с начала строки, которые не являются цифрами. Вместо этого возвращаемый результат пуст! Все подбирается! Что случилось с исключением цифр ?! В обоих gedit (с использованием механизма поиска и замены regex) и в инструментах регулярного выражения Labview шаблон соответствия

 pattern=^[^0-9]* 

который, как я полагаю, эквивалентен, приводит к ожидаемому совпадению – «my_file_». Чем отличается Баш?

  • Perge regex получает слово между шаблоном
  • Применение регулярного выражения к stdin
  • Регулярные выражения с ExpectJ
  • Как использовать переменные в подстановке с регулярными выражениями vim
  • вставить новую строку, когда отрицательный + положительный шаблон найден с помощью sed
  • «Скобки не сбалансированы», хотя я избежал этого?
  • Непрочитанная строка соответствует регулярному выражению, состоящему только из читаемых символов
  • Стратегия для извлечения имени фильма из этого неравномерного набора данных?
  • One Solution collect form web for “Может ли кто-нибудь объяснить подстроку bash, соответствующую мне?”

    Вам нужно понять, что подшаговое соответствие Bash НЕ использует regexes. Скорее, он использует wildcard expansion в тандеме с # ## %%%, чтобы посмотреть кратчайшие и самые длинные совпадения и с любого направления.

    В вашем конкретном случае, когда вы хотите захватить ведущие цифры, вы можете использовать следующую стратегию:

     echo "${myVar%%[0-9]*}"; # delete upto the leftmost digit starting from right 

    вывод

     my_file_ 

    Я нашел следующий сайт: http://www.tldp.org/LDP/abs/html/parameter-substitution.html особенно удобный для всех связанных с Bash вопросов.

    Interesting Posts

    OpenLDAP как только кеш-прокси, ни одна локальная база данных

    Появляется в одной сети

    Не удалось выполнить paswordless ssh даже после выполнения стандартной процедуры

    Как отличить встроенный и внешний утилиты? (например, эхо)

    Как искать только «не установленные» пакеты в Arch Linux?

    Могу ли я прокручивать фоновое окно, не придавая ему фокуса в i3wm

    не смог выполнить ping-маршрутизатор, хотя он предложил IP-адрес

    Извлечение информации из имени файла и содержимого файла

    Как заставить ssh-add запрашивать парольную фразу при загрузке ключа RSA из FIFO?

    завершение bash не работает для одного пользователя

    Веб-браузер подключил звук пульсового звука, как выпустить?

    Разрешение отклонено при попытке доступа к установленным окнам NFS

    Транскодирование и потоковая передача в реальном времени 1080 HTTP-потоков

    Скриншот непрямоугольного расширенного рабочего стола

    В чем разница между kill, pkill и killall

    Linux и Unix - лучшая ОС в мире.