Я пытаюсь изменить конфигурацию Apache следующим образом:
sudo awk '/<Directory \/var\/www\/>/,/AllowOverride None/{sub("None", "All",$0)}{print}' /etc/apache2/apache2.conf | sudo tee /etc/apache2/apache2.conf > /dev/null
После этого /etc/apache2/apache2.conf пуст. Если я, например, сменил целевой файл на ~/apache2.conf, результат верный.
Почему?
Что ваше приключение awk / tee не работает надежно, о чем уже говорилось здесь. ;)
Вы можете попробовать другой способ:
drum-roll
sudo perl -i.bak -0777pe 's/(<Directory \/var\/www\/>([^<].*\n)*.*AllowOverride\s)None/$1All/' /etc/apache2/apache2.conf
-i.bak редактирование на месте и создание резервной копии /etc/apache2/apache2.conf.bak -0777 сразу разрывает весь файл [!d18 ] Входной файл
cat foo
<Directory /var/www/>
foo bar
AllowOverride None
</Directory>
<Directory /var/www1/>
AllowOverride None
</Directory>
Входной файл
perl -i.bak -0777pe 's/(<Directory \/var\/www\/>([^<].*\n)*.*AllowOverride\s)None/$1All/' foo
Содержимое файла после запуска команды
cat foo
<Directory /var/www/>
foo bar
AllowOverride All
</Directory>
<Directory /var/www1/>
AllowOverride None
</Directory>