Как с помощью grep проверить наличие определенной строки с переносом строки в файле?

У меня есть строковая переменная в файле сценария bash, как показано ниже:

string="

test1

test2

"

и Я хочу проверить, содержит ли файл test.txt эту конкретную строку (включая разрывы строк. Т.е. он должен завершиться ошибкой, если он содержит только следующее:

this is a test:
test1

test2
and another one

, потому что разрывы строк выше test1 и ниже test2 не присутствует.

(Причина, по которой я хочу это проверить, состоит в том, что я хочу проверить, есть ли определенный фрагмент кода в исходном файле, а если нет, добавить его.)


Следующее не работает:

string="
    
    test1
    
    test2
    
    "
if ! grep -q string "test.txt"; then
    echo "$string" >> test.txt
fi

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


РЕДАКТИРОВАТЬ:

Ответы автора @terdon и @steeldriver ниже работают для примера строки, который я написал выше, но по какой-то причине они не подходят для этого более реалистичного примера:

string="                                                                
                                                               
if [ -f ~/.script ]; then                            
        . ~/.script         
fi

"  
6
задан 7 October 2021 в 13:31

0 ответов

Другие вопросы по тегам:

Похожие вопросы: