tee приводит к нулевому файлу

Я пытаюсь изменить конфигурацию 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, результат верный.

Почему?

1
задан 20 August 2015 в 15:21

1 ответ

Что ваше приключение awk / tee не работает надежно, о чем уже говорилось здесь. ;)

Вы можете попробовать другой способ:

drum-roll

Использовать мощность perl!

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>
1
ответ дан 23 May 2018 в 18:04

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

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