最近写脚本经常需要用sed去改写文件,其中就遇到一个问题改写的内容可以通过变量来控制.
例如,更改mysql配置文件的server-id
|
上面这种方法可以将port变量插入到sed中并替换my.cnf文件的server-id值.这是一直方法,还有个改进方法.
|
把 sed 命令的单号换成双引号,这样看起来要聪明一些.这个例子port变量没有任何其他符号,加入需要修改成一个带有路径的变量如何来处理?
例如,更慢日志文件名加上路径
原配置文件中log_slow_queries = mysql.log,想更改成/var/mysqlslow.log
|
这样可以么.执行下就知道
sed: -e expression #1, char 47: unknown option to `s'
不得行?要出错?为啥子?
因为变量slowlog里有"/"会被sed解释.
有人可能会想到 slowlog="\/var\/mysqlslow".(我就这么想的)
我真正的需求是SLOWLOG="${CHROOT_DIR}/${PORT}/var/mysqlslow"
傻眼了难道要吧chroot_dir里的"/"也转义一下,未免太笨了点.
后来发现最简单的方法(你肯定比我先想到):
|