2017-07-01 19 views
0

私はいくつかのBash/Shellコマンドを実行するためにComposerを使用しています。Bashで単一引用符を削除する

だから私は何をしようとしています 'database_name_here'を '$ _ENV [' DB_NAME ']'に置き換えようとしています。

"post-update-cmd": [ 
     "sed -i.bak 's/database_name_here/$_ENV['DB_NAME']/g' public/wp-config.php" 
    ] 

これは取得イム結果である。この

define('DB_NAME', 'database_name_here'); 

としてオフ開始します。

define('DB_NAME', '$_ENV[DB_NAME]'); 

しかし、それはこのようにする必要がある($ _ENV周りの単一引用符なし[DB_NAME])

define('DB_NAME', $_ENV[DB_NAME]); 

は、私はsedコマンドを単一引用符を認識させるために何かできることはありますし、削除してください。

任意の助けもいただければ幸いです。

ありがとう、ジェイク。

答えて

2

あなたはsedではなく、明示的な単一引用符の\x27を使用して、単一引用符を認識し、交換するために取得することができます。

sed -i.bak 's/\x27database_name_here\x27/$_ENV[DB_NAME]/g' test.txt 

は、この入力を考える:

define('DB_NAME', 'database_name_here'); 

出力は次のとおりです。

define('DB_NAME', $_ENV[DB_NAME]); 

また、tには二重引用符を使用できます彼は外の区切り文字:

sed -i.bak "s/'database_name_here'/$_ENV[DB_NAME]/g" test.txt 

それとも別の代替は、外側に単一引用符を保ち、内部の単一引用符を隔離するために二重引用符を使用することです:

sed -i.bak 's/'"'"'database_name_here'"'"'/$_ENV[DB_NAME]/g' test.txt 

同様のソリューションを逃れるためにバックスラッシュを使用しています分離された見積書の間に単一引用符: - > [SELD \ JsonLint \ ParsingException]が "./composer.json" 有効なJが含まれていないため

sed -i.bak 's/'\''database_name_here'\''/$_ENV[DB_NAME]/g' test.txt 
+0

おかげで、これは私が取得エラーですSON 行23の解析エラー: ... g.php "、" sed -i.bakの/ \ x27d ---------------------^ 無効な文字列で、エスケープされていないバックスラッシュが表示されます:\ x - 余分な の末尾にカンマが表示されます –

+0

エラーがどこから来ているのか分かりません。 Bashシェルに入れて、そこで働いていました.... –

+0

私はいくつかの代替ソリューションを追加しました。 –

関連する問題