我有一个脚本可以编辑头文件并替换一些文本。
我要替换的文本行是:
#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
当我使用的文件中没有“#”时,它工作正常,它只是那个文件。
有什么想法可以解决这个问题吗?
最佳答案
问题
您遇到引用问题。根据您的设置,Bash 会将不带引号的“#”后面的任何内容视为注释。
解决方案
您应该将 sed 表达式括在双引号中,并用大括号将 shell 变量与表达式中周围的文本分开。例如:
line='#define A MYTEXT'
texttoreplace='foo'
echo "$line" | sed "s/${line}$/${texttoreplace}/g"
关于linux - 变量中包含 "#"的 SED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194659/