web-dev-qa-db-ja.com

SEDでファイルパスをエスケープする方法は?

$fileWithPath$fileを置き換えたいのですが、パスがエスケープされていない(と思う)ため、これは機能しません。逃げる方法は?

sed -i 's/${fileWithPath}/HAHA/g' $file
37
UAdapter
sed -i 's|'$fileWithPath'|HAHA|g' file

単一引用符は、文字列リテラルを定義します。変数をリテラルの外側に置くと、シェルはその部分を展開できます。

また、パスを解析する場合は、sedコマンドでディレクトリ区切り文字「/」と混同しない区切り文字を使用します。

71
ata

スラッシュを含むリテラル文字列のより良い方法:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
13
Jeff Lancaster

置換文字列またはパターン文字列にスラッシュが含まれる状況では、GNU sedが代替コマンドの代替区切り文字を許可するという事実を利用できます。区切り文字の一般的な選択は、パイプ文字またはハッシュです-区切り文字の最適な選択は、多くの場合、処理されるファイルのタイプに依存します。あなたの場合、あなたは試すことができます

sed -i 's#'$fileWithPath'#HAHA#g' $file

最後のの後の文字「g」は、最初の出現のみを変更し、「g」を削除する必要がある場合に、ファイル内のすべての出現を変更するために使用されます。

13
c0m3t