2017-12-01 21 views
1

私はこのbashスクリプトを作成するためにMacOSXを使用しています。スクリプトは他のファイルをチェックし、内容を比較してインクリメントカウンタを作成します。変数を情報に含めるには、カウンタを使用する関数を最初に実行する必要があります。そのため、sedコマンドを使用して行を挿入するのが最適な方法です。一重引用符が作成するリテラル部分を無視できるようにする方法はありますか?これはBSD sedであり、GNU sedではありません。または、sed以外の代替オプションがある場合、私はそれを行う方法を知ることに興味があります。BSD sed、変数を含む文字列を挿入する方法

CODE:

sed -i '' '3i\ 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}' $LOGFILE 
sed -i '' '3i\ 
There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER}' $LOGFILE 

OUTPUT:

There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER} 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER} 

答えて

1

変数は'...'内で展開されません。 一重引用符を二重引用符に変更します。一方 、 二重引用符の内側\は、 それを次の改行をエスケープするために解釈されますが、この場合、あなたはそれがsediコマンドのリテラル\をする必要があります。 二重引用符の内側には、それを\\と書く必要があります。それを一緒に置く

、次のように書く:@EdMortonが指摘したように、単一引用符を使用することがより堅牢で と二重引用符のみ特定するために、必要に応じてそれを打破します

sed -i '' "3i\\ 
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}" $LOGFILE 

この方法は、あなたがのように、エスケープする必要があるかもしれません何かがある場合は文字列全体をスキャンする必要がないため

sed -i '' '3i\ 
There are a total of '"${ALOLANCOUNT}"' Pokemon in Alola, and you have '"${HAVECOUNTER}"', and need '"${ALOLANNEEDCOUNTER}" $LOGFILE 

これは、より堅牢で、 :変数は、このように、使用されている部品私の最初の提案で。

関連する問題