在Shell脚本中编辑文件的某些行?

时间:2019-05-05 21:14:33

标签: bash shell

我正试图编写一个脚本来自动快速地为apache服务器网站创建文件和配置,因为这通常需要5分钟左右,而且非常无聊。

我正在努力的部分是这条线...

# TODO: edit ServerName and DocumentRoot to use $1 and /var/www/$1/public

这是完整的脚本

sudo mkdir /var/www/$1
sudo mkdir /var/www/$1/public
sudo chown -R www-data:www-data /var/www/$1
sudo chmod -R g+w /var/www/$1
sudo usermod -aG www-data $USER
echo "<?php echo phpinfo(); ?>" > /var/www/$1/public/index.php
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/$1.io.conf
# TODO: edit ServerName and DocumentRoot to use $1 and /var/www/$1/public
cp /etc/apache2/sites-available/$1.io.conf /etc/apache2/sites-enabled/$1.io.conf
sudo -- sh -c "echo $1.io   127.0.0.1 >> /etc/hosts"
sudo service apache2 restart
xdg-open $1.io
sleep 5
code /var/www/$1

如何替换.conf apache文件的某些部分?

2 个答案:

答案 0 :(得分:1)

假设您的设置具有以下格式:

ServerName your.server.name
DocumentRoot '/some/path'

您可以执行以下操作(使用GNU sed):

cp /etc/apache2/sites-available/000-default.conf "/tmp/${1}.io.conf"
sed -Ei "s|^([[:blank:]]*)#?([[:blank:]]*ServerName).*$|\1\2 ${1}|;
        s|^([[:blank:]]*)#?([[:blank:]]*DocumentRoot).*$|\1\2 '/var/www/${1}/public'|;" "/tmp/${1}.io.conf"
mv "/tmp/${1}.io.conf" /etc/apache2/sites-available/

答案 1 :(得分:0)

有很多方法可以做到这一点。我最常使用的两个是:

  1. patch

修补Ubuntu风格的Apache conf文件的示例

patch -d/ -p0 <<'EOF'
--- /etc/apache2/apache2.conf
+++ /etc/apache2/apache2.conf
@@ -54,6 +54,7 @@

 # Global configuration
 #
+ServerName your_hostname_goes_here

 #
 # ServerRoot: The top of the directory tree under which the server's
EOF
  1. perl -pi -e 's%old_string%new_string%' filename