SED在变量中带有“#”

时间:2012-06-25 17:56:19

标签: linux sed

我有一个脚本可以编辑头文件并替换一些文本。

我要替换的文字行是:

#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

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

关于我可以采取哪些措施来解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题

你有引用问题。根据您的设置,Bash会在未加引号的“#”之后将任何内容视为评论。

解决方案

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

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