чтобы соответствовать строке внутри, если условие - PullRequest
1 голос
/ 01 мая 2019

У меня есть файл some_file.txt со следующим содержимым:

APC000101052019
APC000201052019
APC000301052019
APC000401052019
APC000501052019

Теперь я пытаюсь сопоставить APC0001 со следующим скриптом:

#!/bin/bash

cat /home/xxxx/xxxx/some_file.txt|while read -r line
do
    if [[ "APC0001" =~ "$line" ]]
    then
        echo $line
        exit 1
    fi
done

Но я не получаю ожидаемый результат, ниже вывод, который я получаю:

+ cat /home/xxxx/xxxx/some_file.txt
+ read -r line
+ [[ APC0001 =~ APC000101052019]]
+ read -r line
+ [[ APC0001 =~ APC000201052019]]
+ read -r line
+ [[ APC0001 =~ APC000301052019]]
+ read -r line
+ [[ APC0001 =~ APC000401052019]]
+ read -r line
+ [[ APC0001 =~ APC000501052019]]
+ read -r line

Что я не так делаю в своем коде?

1 Ответ

3 голосов
/ 01 мая 2019

Шаблон для сопоставления должен находиться справа от выражения =~:

if [[ "$line" =~ ^APC0001 ]]
    then
        echo $line
        exit 1
    fi

Взгляните на раздел [[...]] в руководствах bash / условных конструкциях .

И, как sidenote, вам не нужно cat там. Просто сделай:

while read -r line
do
    # ...
done < /home/xxxx/xxxx/some_file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...