web-dev-qa-db-ja.com

sedのスラッシュとバックスラッシュ

sedを使用して、スラッシュをバックスラッシュとスラッシュに変更したい、つまり/-> \/。しかし、それは機能しません。ここに小さな例があります:

#!/bin/bash
TEST=/etc/hallo
echo $TEST
echo $TEST | sed "s/hallo/bello/g"
echo $TEST | sed "s/\//\\\//g"

最初の3行の出力は想定どおりです。しかし、最後のものは機能しません。どうして?最後の部分を修正するには?

40
devopsfun

使用した式には一重引用符を使用します。

sed 's/\//\\\//g'

二重引用符で囲んで、\には特別な意味があるため、バックスラッシュする必要があります。

sed "s/\//\\\\\//g"

しかし、区切り文字を変更する方がきれいです。

sed 's=/=\\/=g'
sed "s=/=\\\/=g"
82
choroba

試してください:

sed 's/\//\\\//g'

または、スラッシュをエスケープしないように別の区切り文字を使用します。

sed 's,/,\\/,g'
16
cuonglm