$fileWithPath
の$file
を置き換えたいのですが、パスがエスケープされていない(と思う)ため、これは機能しません。逃げる方法は?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
単一引用符は、文字列リテラルを定義します。変数をリテラルの外側に置くと、シェルはその部分を展開できます。
また、パスを解析する場合は、sedコマンドでディレクトリ区切り文字「/」と混同しない区切り文字を使用します。
スラッシュを含むリテラル文字列のより良い方法:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
置換文字列またはパターン文字列にスラッシュが含まれる状況では、GNU sedが代替コマンドの代替区切り文字を許可するという事実を利用できます。区切り文字の一般的な選択は、パイプ文字またはハッシュ#です-区切り文字の最適な選択は、多くの場合、処理されるファイルのタイプに依存します。あなたの場合、あなたは試すことができます
sed -i 's#'$fileWithPath'#HAHA#g' $file
最後の#の後の文字「g」は、最初の出現のみを変更し、「g」を削除する必要がある場合に、ファイル内のすべての出現を変更するために使用されます。