2013-10-29 73 views
4

在bash脚本文件,我已成立一个变量是这样的:在bash如何替换字符串变量,并将其设置为sed命令

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_path1sed命令,但也有错误。

您能给我一些建议吗?谢谢。

+0

可能重复(http://stackoverflow.com/questions/584894/sed-scripting-environment-variable-substitution) – tripleee

+0

@tripleee,谢谢。这篇文章非常有帮助。当时我可能找不到那个帖子,我面临这个问题。或者我使用了不同的关键字,以便搜索引擎不返回该帖子的索引。于是,我在这里发了一个新帖子。 – mining

回答

7

试试这个。

sed -i -e "[email protected]*@working_path='$current_path';@" file1.sh 

使用@,而不是/在替换命令。

+0

谢谢,它的工作原理。 – mining

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文件的第一行吗?你是否删除了她的爆炸线?

+0

是的,先生,当我在终端运行这个'sed -i“1s /.*/ working_path ='\/home \/user \/Desktop'; /”file1.sh'时,它工作,但它会替换'#/ bin/bash'到'working_path ='/ home/user/Desktop;' – mining

+0

我的搜索和替换失败了,有什么想法为什么? 'sed -i“s | \''$ foo”| \''$ bar“/ g”“$ file”'。 错误是:'命令替换:第28行:语法错误:意外的文件结束; sed:-e表达式#1,字符22:未终止的's'命令' – Dennis

+0

是那些反引号应该在那里? –

0

请在模式字符串的开头添加'/'。它用字符串替换模式的所有匹配。 [sed的脚本 - 环境变量替换]的

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

谢谢,先生,拉法的答案,第一个答案,起作用。 – mining