【问题标题】:Using sed command in shell script在 shell 脚本中使用 sed 命令
【发布时间】:2016-06-23 14:28:14
【问题描述】:

这是我的简单 shell 脚本

sample.sh

LOCALCONFIGDIR="Install"
CONFLOC="$LOCALCONFIGDIR/server.conf"
echo "Enter Web Url:"
read  weburl
echo "sed 's/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC
sed "'s/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC

当我运行这段代码时,我在 echo 命令中得到如下结果。

sed 's/^\(ServerName\)$/\1 www.weburl.com/' Install/server.conf

但是在下一行执行 sed 命令时,它说下面的错误。

sed: -e expression #1, char 1: unknown command: `''

我尝试了终端屏幕的 echo 语句中生成的命令,它正在工作。但是Line number 5,在 shell 脚本中不起作用

【问题讨论】:

    标签: linux bash shell sed


    【解决方案1】:

    您需要使用一组引号,而不是两组,并且由于您想要扩展 $weburl 变量,因此您需要使用双引号:

    sed "s/^\(ServerName\)$/\1 $weburl/" "$CONFLOC"
    

    只要$weburl 不包含任何斜线就可以了。如果是,则需要使用与/ 不同的字符,例如%,来分隔替换命令的各个部分:

    sed "s%^\(ServerName\)$%\1 $weburl%" "$CONFLOC"
    

    【讨论】:

    • 它有效。 sed "s%$^(ServerName)$%\1 www.weburl.com%" 安装/server.conf 。但它没有在 ServerName 之后添加文本 www.weburl.com。
    • 我刚刚在第二个sed 中删除了一个流浪$;如果您使用它,它将停止匹配工作。如果这不是问题,那么您的配置文件可能在配置行上的 ServerName 之前或之后有空格,或者该文件可能没有仅包含 ServerName 的行。
    • 也许 sed 命令最好使用单引号并暴露双引号的 shell 变量,即sed 's/.../'"${var}"'/' file。原因是 sed 命令中无意中使用的元字符可能会被 shell 插入。
    • @potong:你写的是我通常会做的,但这次并不重要。
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多