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 式を二重引用符で囲み、式内の周囲のテキストからシェル変数を中かっこで区切る必要があります。例えば:

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