egrep не дает результата в цикле while, однако работает индивидуально - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь получить шаблон регулярных выражений ("^ [\ w + [0-9] {5,6}] $") после вывода одной строки (пример [abc_testing_12345]). Он работает нормально, когда я выполняю его в командной строке, определяя две переменные, input и pattern Но когда я использую то же самое в цикле while и получаю значение ввода из файла, это не работает.

Я видел несколько тем в Интернете и пытался использовать параметры, но это не сработало.

Пример рабочего кода:

    pattern="^\[\w+[0-9]{5,6}\]$"
    input="[abc_testing_12345]"
    echo "$input" | egrep -c "$pattern

печатает значение 1

но когда я заполняю переменную 'input' из файла и затем пытаюсь выполнить grep, она не печатает значение 1

Пример кода:

pattern="^\[\w+[0-9]{5,6}\]$"
cat inputFile | grep "\[" | while read line
do
echo "$line" | egrep -c "$pattern"
done

результат этого кода 0

Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Я не могу воспроизвести вашу проблему.Предоставленный вами скрипт возвращает 1, пока inputfile содержит строку, соответствующую $pattern, например:

[abc_testing_12345]

Однако я бы предложил переписать цикл while следующим образом:

while read line                                                          
do                                                                          
    echo "$line" | grep -c "$pattern"                                      
done <<< $(grep "\[" inputfile)     

Или даже избегайте петли while с:

grep -c "$pattern" inputfile
...