2014-02-19 2 views
3

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

Сценарий следующий:

#!/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 

Где ошибка?

+0

То, что вы выложили можно заменить 'Grep '^ [0-9] +/[0-9] +/[0-9] + $' results'. – chepner

+0

Тема не отражает содержание. Это не вопрос о чтении файла по строкам, а о синтаксисе присваивания bash. –

ответ

4

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

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

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

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

6

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

#!/bin/bash 

regex='[0-9]' 

while read line 
do 
    if [[ $line =~ $regex ]] 
    then 
     echo $line 
    fi 
done < input 
+1

+1 для исправления более важного непонятного вопроса, а также – chepner

1

Elimnate пространства вокруг регулярное выражение:

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

больше объяснений о * почему * заработает больше очков. –

Смежные вопросы