【发布时间】:2015-04-10 20:27:36
【问题描述】:
我有以下名为 SetScript 的 bash 脚本:
#!/bin/bash
# make sure CWD is correct location
if [ ! -f $1 ];
then
echo "No file at \"$1\" found."
exit 0
fi
sed -i -r "s/^([\t ]+SCRIPT = \")[^\"]*\";\ #\*/\1$2\";\ #\*/" $1
此脚本用于在文本文件中更改如下行:
SCRIPT = "default.script"; #*
文本文件只是我与 libconfig++ 库一起使用的配置文本文件。
因此,例如,如果我的配置文本文件名为 settings.cfg,那么我可能会这样做
SetScript settings.cfg another.script
甚至这个
SetScript settings.cfg "another.script"
这些命令将导致上面的文本文件行更改为:
SCRIPT = "another.script"; #*
到目前为止一切顺利。但是,当我尝试用包含正斜杠的 UNIX 路径替换时,我遇到了 sed 的问题。例如:
$ SetScript settings.cfg "/home/me/some.script"
sed: -e expression #1, char 38: unknown option to `s'
$ SetScript settings.cfg /home/me/some.script
sed: -e expression #1, char 38: unknown option to `s'
然后,我的问题是:如何修改我的 bash 脚本(同时仍使用 sed)以允许替换为任何 UNIX 系统路径(相对或完整)?
【问题讨论】:
-
您可以将 sed 分隔符更改为不会出现在文件名中的内容。所以像
sed -i -r "s|^([\t ]+SCRIPT = \")[^\"]*\";\ #\*|\1$2\";\ #\*|" $1这样的东西会起作用。