Добавление строки в файл, только если он еще не существует

Мне нужно добавить следующую строку в конец файла конфигурации:

include "/configs/projectname.conf"

в файл с именем lighttpd.conf

, который я собираюсь использовать с помощью sed для сделать это, но я не могу понять, как.

Как бы вставить его, только если строка еще не существует?

134
задан nbro 25 August 2016 в 12:22
поделиться

3 ответа

Просто будьте проще :)

grep + echo должно хватить:

grep -qxF 'include "/configs/projectname.conf"' foo.bar || echo 'include "/configs/projectname.conf"' >> foo.bar
  • -q be quiet
  • -x соответствует всей строке
  • -F шаблон представляет собой простую строку
  • https://linux.die.net/man/1/grep

Изменить: включены предложения @cerin и @ thijs-wouters .

246
ответ дан 23 November 2019 в 23:51
поделиться

Вот версия sed :

sed -e '\|include "/configs/projectname.conf"|h; ${x;s/incl//;{g;t};a\' -e 'include "/configs/projectname.conf"' -e '}' file

Если ваша строка находится в переменной:

string='include "/configs/projectname.conf"'
sed -e "\|$string|h; \${x;s|$string||;{g;t};a\\" -e "$string" -e "}" file
12
ответ дан 23 November 2019 в 23:51
поделиться

использовать awk

awk 'FNR==NR && /configs.*projectname\.conf/{f=1;next}f==0;END{ if(!f) { print "your line"}} ' file file
3
ответ дан 23 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

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