如何使用斜杠

时间:2016-07-04 12:40:46

标签: linux bash shell sed sh

我正在尝试从demo.cfg文件修改配置文件.sh。我可以使用sed修改它,但问题是当值包含斜杠字符时。

为此,我使用此代码:

read -r -p "(Default PATH: /my/default/path/): " response
    case $response in
        (*[![:blank:]]*) sed -i '/key_one/s/= ''.*/= '$response'/' demo.cfg; echo 'OK';;
        (*) echo 'Using default path'
    esac

变量$response有斜杠的错误:

sed: -e expression #1, char 20: unknown option to "s"

我可以将此变量用于sed函数吗?

此处demo.cfg文件

[params]
key_one = 1
key_two = 9

先谢谢了 最好的问候

3 个答案:

答案 0 :(得分:1)

尝试像这样传递response

${response//\//\\/}

这会将所有/替换为\/。例如:

$ response=/my/path/to/target
$ echo ${response//\//\\/}
\/my\/path\/to\/target

您的个案陈述也存在问题。您的bash脚本应如下所示:

#!/bin/bash

read -r -p "(Default PATH: /my/default/path/): " response
    case $response in
        *[![:blank:]]*) sed -i "/key_one/s/= .*/= ${response//\//\\/}/" demo.cfg
                echo 'OK'
                ;;
        *) echo 'Using default path'
                ;;
        esac

答案 1 :(得分:0)

您有两种选择:

  • 使用其他分隔符替换,例如#_

    sed 's#/foo/bar/#/spam/egg#' file.txt
    

    为了清晰起见,这里使用了模式中没有的东西。

  • 或者逃避实际的/

    sed 's/\/foo\/bar\//\/spam\/egg/' file.txt
    

    这不是很清晰,因此不推荐使用。

答案 2 :(得分:0)

要转义您选择的分隔符,请使用参数展开:

$ response=/foo/bar
$ response=${response//\//\\\/}
$ echo "$response"