web-dev-qa-db-ja.com

sedを使用して、すべてのバックスラッシュをスラッシュに置き換えます

Sedを使用して、次のような入力を取得できるようにします。

C:\Windows\Folder\File.txt

C:/Windows/Folder/File.txt
41
Emily

sedは、ファイルまたはパイプラインからの入力ストリームでテキスト変換を実行できます。例:

echo 'C:\foo\bar.xml' | sed 's/\\/\//g'

取得

C:/foo/bar.xml
57
Emiliano Poggi

文字列全体で1つの文字を別の文字に変換するには、trが最適なツールです。

tr '\\' '/'
59
glenn jackman

ただ使用する:

sed 's.\\./.g'

sedの区切り文字として/を使用する理由はありません。しかし、本当にしたい場合:

sed 's/\\/\//g'
23
Mehrdad
$ 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'は、すべてのバックスラッシュをスラッシュに置き換えます。

9
Jimmy

テキストがBash変数にある場合、パラメーターの置換${var//\\//}はサブストリングを置き換えることができます。

$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml

これは、trsedなどのコマンドを使用したフィルタリングよりも簡潔で明確な場合があります。

7
Toby Speight

これはあなたのために働くかもしれません:

sed 'y/\\/\//'
2
potong

私にとって、これはバックスラッシュをスラッシュに置き換えます。

sed -e "s/\\\\/\//"  file.txt
1
toddcscar

あなたが試すことができます

sed 's:\\:\/:g'`

最初 \は入力を挿入し、2番目の\は、置換したいものです。

そのため、入力される「/」を新しいスラッシュとして挿入するのは、「:」の最初のスラッシュ「\」、2番目のスラッシュ「\」、「:」「\」です。

\\ \/ 

以上です。それが動作します。

1