次の文字列があります。/tmp/test/folder1/test.txt
代わりに使用したいものsed
- たとえば、次のようになります。/
\/
\/tmp\/test\/folder1\/test.txt
だから私は以下を発行します:
echo "/tmp/test/folder1/test.txt" | sed "s/\//\\\\//g"
返されますが:
sed: -e 式 #1、文字 9: 's' の未知のオプション
私は前方とバックスラッシュをエスケープしています。ここで私がどこに間違っているのかわかりません。
ベストアンサー1
\
置き換えられたすべてのスラッシュ/
とすべてのバックスラッシュをそれぞれエスケープ(バックスラッシュを使用)する必要があります。\
$ echo "/tmp/test/folder1/test.txt" | sed 's/\//\\\//g'
\/tmp\/test\/folder1\/test.txt
しかし、これはまったく読むことができません。
ただし、sed
ほとんどすべての文字を区切り文字として使用できます。/
これは、スラッシュ自体を変更したい場合に特に便利です/
(たとえば、;
セミコロンを区切り文字として使用すると、コマンドが簡単になります)。
echo "/tmp/test/folder1/test.txt" | sed 's;/;\\/;g'
その他の場合:
スラッシュを区切り文字として使用し、二重引用符を使用するには、エスケープされたすべてのバックスラッシュを再エスケープしてリテラル値を維持する必要があります。
echo "/tmp/test/folder1/test.txt" | sed "s/\//\\\\\//g"
引用符がまったく必要ない場合は、別のバックスラッシュが必要です。
echo "/tmp/test/folder1/test.txt" | sed s/\\//\\\\\\//g