SED与“#”在一个variables

我有一个编辑头文件并replace一些文本的脚本。

我想要replace的文字是:

#define A MYTEXT 

我需要在MYTEXT上做一些操作,所以我正在循环查找string并获取值:

 if [[ "$line" == *MYTEXT* ]] then echo $line bn=`echo $line| cut -d 'Y' -f 2` #split at the Y value in the string #operation here and junk here sed 's/'$line$'/'$texttoreplace'/g' HeaderFile.h > out.header.h fi done < HeaderFile.h 

正常的string工作正常,但是sed死亡:

 #define A MYTEXT sed: 1: "s/#define": unterminated substitute pattern 

当我使用一个不包含“#”的文件的时候,它正常工作,就是这个文件。

任何想法,我可以做什么来解决这个问题?

问题

你有一个报价问题。 根据你的设置,Bash会把一个没有引号的“#”作为注释来处理。

解决方案

你应该把你的sed表达式用双引号引起来,并用大括号将你的shell变量与表达式中的文本分开。 例如:

 line='#define A MYTEXT' texttoreplace='foo' echo "$line" | sed "s/${line}$/${texttoreplace}/g"