sed を使用して順方向とバックスラッシュをエスケープします。

sed を使用して順方向とバックスラッシュをエスケープします。

次の文字列があります。/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
    

おすすめ記事