Linux bash: 手間のかからないファイルの検索と置換

Linux bash: 手間のかからないファイルの検索と置換

問題を回避せずに単純な「検索と置換」を実行できるbashソリューションはありますか?<!-- JavaScript -->HTMLファイルを複雑なJavaScriptファイルの内容に置き換えようとしています。

頑張りました

JS=$(<"path to javascript file")
sed "s|<!-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"

しかし、あなたが得る限り

sed: -e Ausdruck #1, Zeichen 16: Nicht beendeter `s'-Befehl

Powershellでは、

$CSS = Get-Content "path to javascript file"
(Get-Content "path to html file").replace('<!-- JavaScript -->', $JS) | Set-Content "path to html file" -Force

それは魅力のように動作し、問題から抜け出すことはできません。

アップデート(ただし、どちらも機能しません):

JS=$(<"${TemporaryPath}/${Project}/${Project}.js")
E='!'
sed "s|<${E}-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"

わかりましたsed: -e Ausdruck #1, Zeichen 68: Nicht beendeter s'-Befehl。 $ JSの内容を「foo」のような基本的な内容に変更すると機能します。 $ JSのJavaScriptの内容に問題があるのではないでしょうか? $ JSの内容を無関係にするにはどうすればよいですか?

ベストアンサー1

問題はbashが感嘆符を解釈していることです。残念ながら、バックスラッシュでエスケープすることは機能しません。別の変数に入れるか、変数を二重引用符で囲んでいる間に一重引用符で囲むと、すべてがうまくいきます。 。 。

$ ARG="mytest"
$ echo "hello $ARG!"
bash: !": event not found
$ # didn't work
$ echo "hello $ARG\!"
hello mytest\!
$ # didn't work either!
$ echo "hello $ARG"'!'
hello mytest!
$ # that's better
$ E='!'
$ echo "hello $ARG$E"
hello mytest!
$ I like this one best.

おすすめ記事