我在PublicDefine.h中定义了一个marco开关来控制我的代码中的目标设备。
我的意思是根据构建shell中的选项自动替换目标句子。
下面是我的代码的和平,我收到一个错误“sed:-e expression#1,char 5:comments不接受任何地址”。
有人可以告诉我如何处理#?或者你可以给我另一个建议。谢谢!
nLine=`grep NO_LCD PublicDefine.h -nR | cut -d ":" -f 1`
dfine_nolcd="#define NO_LCD 1"
ndfine_nolcd="#undef NO_LCD "
echo $dfine_nolcd #this is a debugging sentence
echo $ndfine_nolcd #this is a debugging sentence
echo "nLine $nLine"
if [ "$1"x = "NO_LCD"x ]; then
sed -i "${nLine} ${dfine_nolcd}" PublicDefine.h
else
sed -i "${nLine} ${ndfine_nolcd}" PublicDefine.h
fi
答案 0 :(得分:0)
sed -i '2 c xyz' file
可用于用" xyz"替换给定的文件行。
下面的句子解决了我的问题:
sed -i "${nLine} c ${dfine_nolcd}" PublicDefine.h
答案 1 :(得分:0)
好的,正如您所注意到的,您遇到的问题是您给了sed
一个行号和一个字符串,但没有给出命令。它将您的字符串中的#
符号作为开始注释的命令。
但是找不到行号仍然没有必要,因为sed
可以根据内容而不是行号来匹配行,所以你可以使用类似的东西:
使用给定字符串更改包含NO_LCD
的任何行:
sed -e '/NO_LCD/c#define NO_LCD 1' PublicDefine.h
(/regex/
- 与匹配正则表达式的行c
- 将行更改为后续字符串。)
或者无条件地尝试在整行上进行字符串替换:
sed -e 's/^.*NO_LCD.*$/#define NO_LCD 1/' PublicDefine.h
假设PublicDefine.h
包含
something
NO_LCD replace me
something
都打印
something
#define NO_LCD 1
something