Мне нужно добавить следующую строку в конец файла конфигурации:
include "/configs/projectname.conf"
в файл с именем lighttpd.conf
, который я собираюсь использовать с помощью sed
для сделать это, но я не могу понять, как.
Как бы вставить его, только если строка еще не существует?
Просто будьте проще :)
grep + echo должно хватить:
grep -qxF 'include "/configs/projectname.conf"' foo.bar || echo 'include "/configs/projectname.conf"' >> foo.bar
-q
be quiet -x
соответствует всей строке -F
шаблон представляет собой простую строку Изменить: включены предложения @cerin и @ thijs-wouters .
Вот версия 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
использовать awk
awk 'FNR==NR && /configs.*projectname\.conf/{f=1;next}f==0;END{ if(!f) { print "your line"}} ' file file