Скрипт Bash не принимает регулярные выражения - PullRequest
0 голосов
/ 13 марта 2019

Это мой первый раз, когда я использую bash, и я хочу разработать небольшой скрипт, где, когда текстовый файл предоставляется в качестве аргумента, он читает файл построчно и в каждой строке ищет слова, которые соответствуют определенному шаблону регулярных выражений.,Если слово в строке соответствует шаблону регулярного выражения, я хочу, чтобы программа напечатала это слово.

, показанный ниже, является моим кодом:

#!/bin/bash
pat = "[((?:[a-z][a-zA-Z0-9_]*))(\\.)(png)]"
while IFS='' read -r line || [[ -n $line ]];do
   echo "Text read from file: $line"
   if [[ $line =~ $pat ]];
   then
        echo "line '$line'"
   else
        echo "DOES NOT MATCH BRANCH_REGEX"
   fi
done < $1

, когда я запускаю это, скрипт говорит, что:

test2.sh: 2: test2.sh:pat: not found Текст прочитан из файла: # {{parameters.application_name}} Результаты теста производительности test2.sh: 5: test2.sh: [[: not found НЕ СООТВЕТСТВУЕТ BRANCH_REGEX

Не могуопределить, почему скрипт не принимает шаблон

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Ваше регулярное выражение недействительно для bash. bash не поддерживает группу без захвата, и двойная экранирующая точка также является проблемой. Кроме того, у вас есть место вокруг =, что является синтаксической ошибкой. Вы должны проверить ваш скрипт на shellcheck.net на предмет всех синтаксических проблем.

Вам просто нужно использовать это регулярное выражение:

pat='[a-z][a-zA-Z0-9_]*\.png'
0 голосов
/ 13 марта 2019

исправить ваше объявление var (убрать пробелы):

pat="[((?:[a-z][a-zA-Z0-9_]*))(\\.)(png)]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...