Прочитайте файл по строкам с помощью bash script

Мне нужно bash script, чтобы читать файл по строкам. Если регулярное выражение соответствует, выделите эту строку.

script:

#!/bin/bash
echo "Start!"
for line in $(cat results)
do
 regex = '^[0-9]+/[0-9]+/[0-9]+$'
 if [[ $line =~ $regex ]]
 then
 echo $line
 fi
done

Он печатает содержимое файла, но показывает это предупреждение:

./script: line 7: regex: command not found

Где ошибка?

3 ответа

Проблема в этом случае - это пробелы вокруг знака = в regex = '^[0-9]+/[0-9]+/[0-9]+$'

Это должно быть

regex='^[0-9]+/[0-9]+/[0-9]+$'

ShellCheck автоматически предупреждает вас об этом, а также предлагает, где указать ваши переменные и как читать строки за строкой (вы в настоящее время делает это слово за словом).


Другие давали вам подсказки о действительном регулярном выражении для использования. Правильный способ перебрать все строки в файле:

#!/bin/bash
regex='[0-9]'
while read line
do
 if [[ $line =~ $regex ]]
 then
 echo $line
 fi
done < input


Выполнить пробелы вокруг регулярного выражения:

regex='^[0-9]+/[0-9]+/[0-9]+$'

licensed under cc by-sa 3.0 with attribution.