tee 生成空文件

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

您在管道中两次引用同一个文件,在获取tee文件之前会覆盖该文件awk。请使用临时文件或sponge使用更多工具

GNU awk 的最新版本 4.1.1 有一个-i inplace争论模拟就地编辑文件:

答案2

你的awk/tee冒险不能可靠地进行,这已经说过了这里;)

你可以尝试另一种方法:

击鼓

使用的力量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

    一次性读取整个文件


例子

输入文件

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>

相关内容