unix脚本中的回车符

时间:2012-01-15 15:14:45

标签: bash unix

我有一个像这样的文件

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
</VirtualHost>

我想实现这个目标:

<VirtualHost *:80>
        ServerAdmin info@domain.com
        ServerName domain.com
        ServerAlias www.domain.com

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
</VirtualHost>

我厌倦了这一点,但是线路支架无法正常工作。 我甚至没有运气地试过\ r \ n。

sudo sed -i "s/webmaster@localhost/info@domain.com\rServerName domain.com \rServerAlias www.domain.com/" /etc/apache2/sites-available/domain

我在这之间得到了这个奇怪的角色:

<VirtualHost _default_:443>
        ServerAdmin info@domain.com ^MServerName domain.com ^MServerAlias www.domain.com

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
</VirtualHost>

我错过了什么?

非常感谢,

2 个答案:

答案 0 :(得分:4)

Unix文本行结束字符为\n,ASCII 0x0A(新行/换行符)。 \r 0xOD是回车。

在您的sed表达式中将\r替换为\n,您应该很高兴。

答案 1 :(得分:2)

使用sed(GNU版本)的一种方式:

script.sed的内容:

## Match line with string 'serveradmin' ignoring case.
/serveradmin/I {
    ## Append text after this line.
    a\  
## Literal text to append until a line not ending with '\'
\tServerName domain.com\
\tServerAlias www.domain.com
}

运行脚本:

sed -f script.sed infile

结果:

<VirtualHost *:80>                                                                                                                                                                                                                           
        ServerAdmin webmaster@localhost                                                                                                                                                                                                      
        ServerName domain.com                                                                                                                                                                                                                
        ServerAlias www.domain.com                                                                                                                                                                                                           

        DocumentRoot /var/www/                                                                                                                                                                                                               
        <Directory />                                                                                                                                                                                                                        
                Options FollowSymLinks                                                                                                                                                                                                       
                AllowOverride None                                                                                                                                                                                                           
        </Directory>                                                                                                                                                                                                                         
</VirtualHost>