sedを使用して、すべてのバックスラッシュをスラッシュに置き換えます
Sedを使用して、次のような入力を取得できるようにします。
C:\Windows\Folder\File.txt
に
C:/Windows/Folder/File.txt
sed
は、ファイルまたはパイプラインからの入力ストリームでテキスト変換を実行できます。例:
echo 'C:\foo\bar.xml' | sed 's/\\/\//g'
取得
C:/foo/bar.xml
文字列全体で1つの文字を別の文字に変換するには、tr
が最適なツールです。
tr '\\' '/'
ただ使用する:
sed 's.\\./.g'
sed
の区切り文字として/
を使用する理由はありません。しかし、本当にしたい場合:
sed 's/\\/\//g'
$ echo "C:\Windows\Folder\File.txt" | sed -e 's/\\/\//g'
C:/Windows/Folder/File.txt
この場合のsedコマンドは's/OLD_TEXT/NEW_TEXT/g'
です。
先頭の「s」は、OLD_TEXTを検索してNEW_TEXTに置き換えるように指示するだけです。
末尾の「g」は、最初の行だけでなく、指定された行のすべての出現を置き換えることを示しています。
そしてもちろん、「s」、「g」、古いもの、新しいものを互いに分離する必要があります。ここで、区切り文字としてスラッシュを使用する必要があります。
あなたの場合OLD_TEXT == '\'
およびNEW_TEXT == '/'
。ただし、スラッシュを入力して、 期待通りに働く 文字列を区切り文字として同時に使用している間は、文字通り解釈してください。一般に、スラッシュは非常に特殊であるため、そのように処理する必要があります。バックスラッシュを「エスケープ」(つまり、先行)する必要があります。
あなたのために、OLD_TEXT == '\\'
とNEW_TEXT == '\/'
。 's/OLD_TEXT/NEW_TEXT/g'
パラダイムの中にこれらを入れる's/\\/\//g'
。と読む
's
/\\
/\/
/g
'およびエスケープ後は
's
/\
//
/g
'は、すべてのバックスラッシュをスラッシュに置き換えます。
テキストがBash変数にある場合、パラメーターの置換${var//\\//}
はサブストリングを置き換えることができます。
$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml
これは、tr
やsed
などのコマンドを使用したフィルタリングよりも簡潔で明確な場合があります。
これはあなたのために働くかもしれません:
sed 'y/\\/\//'
私にとって、これはバックスラッシュをスラッシュに置き換えます。
sed -e "s/\\\\/\//" file.txt
あなたが試すことができます
sed 's:\\:\/:g'`
最初 \
は入力を挿入し、2番目の\
は、置換したいものです。
そのため、入力される「/」を新しいスラッシュとして挿入するのは、「:」の最初のスラッシュ「\」、2番目のスラッシュ「\」、「:」「\」です。
\\ \/
以上です。それが動作します。