2011-10-22 42 views
1

sed,替換反斜槓我希望用斜線替換所有反斜槓(與include指令出現在同一行)。sed,#include

這裏是我到現在爲止..

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

這個工程,我期待,但問題是,它只是取代一個\在同一時間......如果我想替換所有三個在上面的文本中,我必須運行sed命令3次...最後的g標誌應該全局替換,不是?

我使用的是在Ubuntu 11.10 SED 4.2.1 ...

+0

'g'是全球性的,但你的''*'是貪婪的! –

回答

6

的問題是你匹配的方式。 .*是貪婪的,所以它匹配最後一個反斜槓,然後認爲它已完成。試試這個:

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

只在符合第一個模式的行上運行替換。

+0

謝謝:)這個很好用 – Adi

+0

+1沒有任何好轉。 –

2

您需要一個複合命令 - 第一個模式匹配以#include開頭的行,第二個模式匹配您的斜槓轉換。

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