bash脚本:查找并替换多字符串

时间:2014-01-26 14:59:06

标签: linux bash sed debian

我正在尝试编写一个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'

我试图用反斜杠逃避正斜杠:'/'但我认为我走错了轨道。必须有更好的方法来做到这一点吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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 - 因为你最终不得不逃避更少的角色并最终节省时间。

相关问题