我有一个编辑头文件并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"