2014-01-26 87 views
0

我试图写一个bash脚本来配置一台服务器,我需要更改线路:的bash脚本:查找和替换字符串多字

listen = /var/run/php5-fpm.sock 

等于如下:

listen = 127.0.0.1:9000 

文件中:

/etc/php5/fpm/pool.d/www.conf 

所以我一直在寻找的教程使用SED和我试过下面的命令来不有效:

$~: sed -i 's//var/run/php5-fpm.sock/127.0.0.1:9000/g' /etc/php5/fpm/pool.d/www.conf 
    $~: sed: -e expression #1, char 8: unknown option to `s' 

我试着用反斜杠转义正斜杠:'/'但我想我在错误的轨道上。必须有更好的方法来做到这一点?

感谢您的帮助。

回答

3

这是因为您试图在模式中替换字符'/',并且此字符用于分隔'///'表达式。你有两种选择,你可以用'/'或 - 来转义每个'/'字符,这是我喜欢的,用不同的字符来分隔模式和替换字符串 - 我倾向于使用'!'

's'后面的字符用于分隔表达式。

sed -i 's!/var/run/php5-fpm.sock!127.0.0.1:9000!g' /etc/php5/fpm/pool.d/www.conf 

我其实已经养成了总是用'!'的习惯,对于sed和perl--因为你最终不得不逃脱更少的角色并最终节省时间。

+0

非常感谢,我会记住小费! –

+1

请注意:'!'是'bash'中的元字符,是C shell世界中的一种感染。单引号(AFAIK)内部没问题,但可能会在双引号或外引号中引起问题。正则表达式应该总是单引号,所以它不是一个大问题。 –