在bash中如何替换字符串变量,并将其设置为sed命令

时间:2013-10-29 01:14:41

标签: bash sed

在bash脚本文件中,我设置了一个这样的变量:

    current_path=`pwd`
    sed -i "1s/.*/working_path='$current_path';/" file1.sh

我想运行此脚本将file1.sh的第一行替换为working_path='$current_path';,但current_path具有/sed命令,/sed替换模式中预定义。 我试过这个:

    current_path1="${current_path/\//\\\/}"

以上一行,我想将变量/中的current_path替换为\/,然后将current_path1输入sed命令,还要有错误。

你可以给我一些建议吗?感谢。

3 个答案:

答案 0 :(得分:7)

试试这个。

sed -i -e "1s@.*@working_path='$current_path';@" file1.sh

在替换命令中使用@代替/

答案 1 :(得分:2)

您可以为s///命令使用不同的分隔符:

current_path=`pwd`
sed -i "1s|.*|working_path='$current_path';|" file1.sh

但你真的没有在这里搜索和替换,你想插入新行并删除旧行:

current_path=`pwd`
sed -i -e "1i\working_path='$current_path)';" -e 1d file1.sh

你真的在改变.sh文件的第一行吗?你是否删除了she-bang线?

答案 2 :(得分:0)

请在模式字符串的开头添加'/'。它用string替换了pattern的所有匹配。

 current_path1="${current_path//\//\\\/}"