2015-10-05 34 views
0

裏面一個大的配置文件中的我有類似:使用Perl正則表達式+更改#定義和#undef在C++

#define DO_THIS_NOW // Set DO_THIS_NOW before running y 

我想有一個簡單的Perl的一行,可以將其更改爲:

#undef DO_THIS_NOW 

然而,有時候,它實際上可能有額外的空間或兩個:

#define DO_THIS_NOW // Set DO_THIS_NOW before running y 

解決方案我正在看的東西會沿線︰

perl -MPOSIX -pe's/define DO_THIS_NOW/undef DO_THIS_NOW/e' file.h > file.h.2 

但我似乎無法得到語法很正確。

這是最好的方式去做到這一點?還是有一個明顯的其他方式來做到這一點?我的最終遊戲是將perl單線程放入bash腳本中。

回答

1

可以使用\s+語法匹配一個或多個空白字符。

perl -pe 's/define\s+DO_THIS_NOW/undef DO_THIS_NOW/' file.h > file.h.2 
  • \s單個空格相匹配,像空間,標籤等
  • +改性劑相匹配的一個或多個的任何它遵循

/e改性評估替換字符串作爲Perl代碼並用評估結果替換匹配的文本。這個替換沒有必要。

查看perldoc perlretut瞭解更多信息。

+0

太棒了!/e修飾符是我的主要問題,並導致錯誤。謝謝。 – insomniacjunkie