我有一个脚本可以编辑头文件并替换一些文本。
我要替换的文字行是:
#define A MYTEXT
我需要在MYTEXT上做一些操作,所以我循环遍历文件找到字符串并获取值:
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
哪种方法适用于普通字符串,但是sed正在死于:
#define A MYTEXT
sed: 1: "s/#define": unterminated substitute pattern
当我使用一个不是“#”的文件时它工作正常,它就是那个文件。
关于我可以采取哪些措施来解决这个问题?
答案 0 :(得分:2)
你有引用问题。根据您的设置,Bash会在未加引号的“#”之后将任何内容视为评论。
您应该将sed表达式用双引号括起来,并使用大括号将shell变量与表达式中的周围文本分开。例如:
line='#define A MYTEXT'
texttoreplace='foo'
echo "$line" | sed "s/${line}$/${texttoreplace}/g"