Проблема возникает при обновлении файлов конфигурации. Например, вы можете сделать это как функции сценария оболочки:
#!/bin/sh
add_data() {
grep "^$2$" "$1" >/dev/null 2>/dev/null || echo "$2" >>"$1"
}
add_data program.conf "Line 1"
add_data program.conf "Line 2"
В этом примере я привязал выражение так, чтобы совпадали только строки, не содержащие лишнего текста. Но предполагается, что в данных нет метасимволов. Этот вызов не будет добавлять буквальный текст:
add_data program.conf ".*Line 2$"
Вы можете обойти это, экранировав символы, которые могут вызвать проблемы с grep.
Комментаторы отмечают, что можно обойти эту проблему, используя параметр POSIX -x
:
Учитывать только строки ввода, в которых используются все символы в строка, исключающая завершение, чтобы соответствовать всей фиксированной строке или регулярному выражению, чтобы соответствовать строкам.
со следующим результатом:
#!/bin/sh
add_data() {
grep -F -x "$2" "$1" >/dev/null 2>/dev/null || echo "$2" >>"$1"
}
add_data program.conf "Line 1"
add_data program.conf "Line 2"
add_data program.conf ".*Line 2$"