使用sed的脚本在输出文件中添加“ e”


18

我有一个添加新用户并为用户域名创建虚拟主机的脚本。该脚本可以很好地运行,但有一个例外...在/ etc / apache2 / sites-available /中,我所有的虚拟主机文件都有两个副本,一个带有e,一个没有。

我相信我的问题出在使用SED命令时。我可以再发表意见吗?

这是脚本:

# set the working directory
dir=$(pwd)

# request the new domain name
printf "Enter the new domain name, without the www (i.e newdomain.com):\n"
read newdomain

# request the new username
printf "Enter the new username (i.e newusername):\n"
read username

# create the new user
sudo adduser $username

# copy the virtual host to sites-available
sudo cp /templates/domain-vhost /etc/apache2/sites-available/$newdomain

# echo results
echo "Successfully created the virtual host file at: /etc/apache2/sites-available/$newdomain.."

# change the domain name in the virtual host file
sudo sed -ie "s/NEWDOMAINNAME/$newdomain/" /etc/apache2/sites-available/$newdomain

# echo results
echo "Modified the virtual host to reflect the new domain: $newdomain.."

# change the directory path in the virtual host
sudo sed -ie "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain

# echo results
echo "Successfully modified the new virtual host file.."

# enable the site with apache
cd /etc/apache2/sites-available/
sudo a2ensite $newdomain

# echo results
echo "Successfully enabled the $newdomain.."

# change to previous working directory
cd $dir

# reload apache
sudo /etc/init.d/apache2 reload

# notify user of action
echo "Finished creating the new domain, $newdomain, and restarted Apache.."

3
抱歉,键入后我意识到自己的错误,在使用SED命令时,我使用了-i选项来编辑文件“内联”而不创建副本。由于某种原因,我还添加了e命令,该命令应该添加脚本。我将-ie更改为-i,并且脚本可以根据需要运行。我还不能回答自己的问题,因此添加了评论。
jason.dot.h 2011年

Answers:


17

您需要将sed -i-e参数分开。-ie告诉sed创建一个附加了“ e”的备份文件。

手动输入<code> -i </ code>

要解决此问题,只需将上面的sed调用替换为:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain

尽管您对此有评论,但我还是添加了详细信息作为完整性的答案。
杰里米·克尔

当我第一次阅读此答案时,我理解了它的意思,但并没有立即理解为什么将e作为后缀。然后,我检查了手册页,并意识到i采用了可选参数。回想起来,这个答案很明显,但花了我一秒钟的时间才明白原因(因此添加了图片)。
克里斯·施密茨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.