在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
命令,还要有错误。
答案 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//\//\\\/}"