Windowsファイルパスのスペースをエスケープしたいだけです。私はこれを試しています:
echo "111 1111 "| sed -e "s/[[:space:]]/\\ /g"
スペースのみに一致しますが、置き換えは行いません。
二重引用符を使用する場合、bash
は\\
を解釈し、\
を出力します。これは、sed
から次のスペースとともにスペースだけに解釈されます。
したがって、もう1つのバックスラッシュが必要です。
echo "111 1111 " | sed -e "s/[[:space:]]/\\\ /g"
ただし、bashの解釈を防ぐために、単一引用符を使用することをお勧めします。
echo "111 1111 " | sed -e 's/[[:space:]]/\\ /g'
出力:
111\ \ 1111\
別の方法:
変数としてファイルパスがある場合は、シェルメソッドを使用できます。
path="111 1111 "
echo ${path// /\\ }
_[[:space:]]
_はスペースだけではなく、タブや改行を含むすべての空白文字に一致しません。本当にそれが必要な場合は、GNU sed
(Ubuntuの場合と同様)に_\s
_という省略クラスがあります。
_sed 's_\s_\\&_g'
_
このs
ubstitutesすべての(g
)空白文字(_\s
_、パターン、ホールドスペースに埋め込まれたスペース、タブ、改行)に、バックスラッシュ(_\\
_)とそれ自体を付けたもの-_&
_一致したパターン全体です。スラッシュとバックスラッシュは常に混乱しているように見えるため、別の区切り文字を使用しています。 _s/\s/\\&/g
_ももちろん有効です。
space文字のみを置換する場合は、次のように使用します。
_sed 's_ _\\&_g'
_
_$ echo "111 1111 " | sed 's_ _\\&_g'
111\ \ 1111\
_
文字クラスの詳細については、 ここではregular-expressions.info を参照してください。