2

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

我要替换的文本行是:

#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

当我使用其中没有“#”的文件时,它工作正常,它只是那个文件。

关于我能做些什么来解决这个问题的任何想法?

4

1 回答 1

2

问题

你有一个报价问题。根据您的设置,Bash 会将未引用的 '#' 之后的任何内容视为注释。

解决方案

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

line='#define A MYTEXT'
texttoreplace='foo'
echo "$line" | sed "s/${line}$/${texttoreplace}/g"
于 2012-06-25T18:03:02.647 回答