2011-10-11 15 views
0

我能夠使用正則表達式以可變的單個匹配,以取代線:複製包含可變的一個或多個實例的線然後更換變量在重複線

(^.*)(OLD)(.*$)/$1$2$3\n$1NEW$3

例如:

enum{ 
    OLD, 
    END 
}; 

char *const test_token[] = { 
    [OLD] = "OLD", 
    NULL 
}; 

將與

enum{ 
    OLD, 
    NEW, 
    END 
}; 

char *const test_token[] = { 
    [OLD] = "OLD", 
    [OLD] = "NEW", 
    NULL 
}; 

替換這是COR直接出現「OLD」變量的單個事件,但不能有多個。

我可以看到爲什麼正則表達式不適用於多個事件,但我不知道如何改進它。

感謝您的任何幫助

+0

你在用什麼語言? – ridgerunner

+0

我在Netbeans中運行,它可以解釋替換命令的正則表達式 – squater

+0

你可以發佈哪個是你想要的輸出嗎? – Davide

回答

1

我不能說在IDE中的替換對話框中如何做到這一點。

隨着SED:

sed '/OLD/ {p; s/OLD/NEW/g}' 

這不會工作,雖然在舊SEDS,所以幾個選擇:

perl -pe 'if (/OLD/) {print; s/OLD/NEW/g}' 
awk -v "old=OLD" -v "new=NEW" '{print} $0 ~ old {gsub(old, new); print}' 
+0

謝謝,sed解決方案的工作原理,如果你可以在正則表達式中使用它,它會很酷。 – squater

0

AWK:

awk '1;gsub(/OLD/,"NEW")' input 

你的正則表達式也進行更換。如果你只想要「原生正則表達式」它將是/舊/,替換將是「新」。