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


40

私は交換したいと思います$fileWithPath$fileただし、これはパスがエスケープされていない(と思う)ので動作しません。逃げる方法は?

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

回答:


72
sed -i 's|'$fileWithPath'|HAHA|g' file

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

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


1
$fileWithPath空白が含まれている場合、間違ったパターンが挿入されることに注意してください。
レーケンシュタイン

ファイルパスの区切り文字を変更することに関するボーナスヒントは、命の恩人でした!
Shadoninja

私はあなたの命令に引用が多すぎると思います。私の例sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnはうまくいくようです。
レオレオポルドヘルツ


15

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.