У меня есть регулярное выражение:Perl Regex не работает в скрипте Bash?
^(.+?)(\.[^.]+$|$)
, который отделяет имя файла и расширение файла (если есть один) http://movingtofreedom.org/2008/04/01/regex-match-filename-base-and-extension/
отлично работает в Perl
Say $ FILE =» .myfile.form.txt '
$ 1 является' .myfile.form»и
$ 2 «.txt», так как они должны быть
Я знаю Баш регулярных выражений и Perl регулярное выражение не то же самое, но я никогда не имел проблем с Bash не Повторное сопоставление до сих
Но когда я пытаюсь использовать в в Баш скрипт, как, скажем ...
FILE='.myfile.form.txt'
[[ $FILE =~ ^(.+?)(\.[^.]+$|$) ]]
$ {BASH_REMATCH [1]} будет просто имя файла целиком (.myfile.form.txt), и ничего в $ {BASH_REMATCH [ 2]}
Мне интересно, что здесь не так/происходит
Спасибо за любую помощь!
Что заставляет вас думать, Баш и Perl принимают одни и те же регулярные выражения? Это разные программы с разными правилами. –
В сценарии bash, если вы хотите совместить, вы можете использовать grep, с -P, для использования выражений Perl. (подробнее: $ grep --help) – Tamalero
О, извините, я не уточнил. Я знаю, что они не то же самое, мне интересно, что я могу изменить, чтобы он работал так, как предполагалось в сценарии Bash. И я попробовал «grep -oP», но система, в которой я нуждаюсь, чтобы работать, не позволяет использовать флаг -P, установленный grep без него. Кроме того, ремаркетинг в grep не сохранит групповое соответствие. И даже с -o, имя файла будет напечатано как одна строка, а не разделено –