2011-10-22 10 views
1

すべてのバックスラッシュ(インクルード・ディレクティブと同じ行に表示される)をスラッシュに置き換えます。ここでsed、#includeのバックスラッシュを置き換えます。

は、私が今まで持っているものです。..

echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g' 

私が期待するように、これは動作しますが、問題は、それが一つだけを置き換えることです\時...私は3つすべてを交換したい場合テキストの上に、私は3回sedコマンドを実行する必要があります...最後にgフラグは、グローバルに置換を行う必要がありますか?私はUbuntuの11.10でのsed 4.2.1を使用してい

...

+0

'g 'はグローバルですが、あなたの'。* 'は貪欲です! –

答えて

6

問題は、あなたが一致している方法です。 .*は貪欲なので、最後のバックスラッシュに最初にマッチして、それが完了したと考えます。これを試してください:

... | sed '/^#include/s&\\&/&g' 

これは、最初のパターンに一致する行にのみ置換を実行します。

+0

ありがとうございます:)これは素晴らしい作品です。 – Adi

+0

+1良くなりません。 –

2

複合コマンドが必要です。最初のパターンは#includeで始まる行と一致し、2番目のパターンはスラッシュ変換を行います。

sed '/^#include/ s&\\&/&g' 
関連する問題