パスとして文字列があります。
/tmp/something
バックスラッシュを使用してスラッシュをエスケープする必要があります。
\/tmp\/something
どうすればいいですか?おそらくsed
?
正しい方向を教えてください。
答え1
Bashの独自の変数操作方法(パラメータ拡張)を使用してこれを実行できますが、構文は非常にひどいです。
$ string='/tmp/something'
$ escapedstring="${string//\//\\\/}"
$ printf '%s\n' "$escapedstring"
\/tmp\/something
これをより詳細に説明するために、bashは${var//xxx/yyy}
「変数をインポートしてvar
すべての項目をxxx
」に置き換えることを意味しますyyy
。この場合、代替側と置換を指定するときにスラッシュをエスケープする必要があります。前者は\/
単一のスラッシュ用で、後者は\\\/
バックスラッシュと前方のスラッシュを追加したものなので面白い${string//\//\\\/}
形が。
バックスラッシュ文字は実装や環境に応じて直接処理される可能性があるため、コンテンツを表示するecho
ために使用しないでください。echo
答え2
sed
正しい方向です!同様のチュートリアルに従ってくださいhttps://www.grymoire.com/Unix/Sed.html#uh-1;最も基本的な方法は
echo $string | sed 's;old;replacement;g'
s
コマンドがある場所(例:「検索と置換」)は、g
「完了するまですべての行で繰り返す」を意味するフラグであり、old
置き換えたい項目(/
あなたの場合)はreplacement
置き換えたい項目です。 (バックスラッシュをエスケープする必要があるかもしれません\\/
。)
楽しくお過ごしください!
答え3
この行に沿って実行できるいくつかの作業があります。
# let
str='/tmp/something'
str_esc=$(printf '%s\n' "$str" | sed 's:/:\\&:g')