2010-12-06 104 views
1

我有這個作爲我的目標文件:sed - 命令來匹配一條線,並只更改一個數字部分?

#define NUMTHREADS 4 
#define ar 1000 
#define ac 1000 
#define br 1000 
#define bc 1000 

我想用sed的這些線,不同的號碼只更換號碼(這樣做是bash腳本)。但是,我不想在文件的任何其他位置更改這些值。該腳本無法直接瞭解這些值,因爲它們可能與上面列出的不同。

所以基本上:

#define ar行查找,然後給定號碼更換後一個一般數值匹配。這可能與sed?

回答

4

當然,這幾乎是正則表達式的一點:

sed [-i] 's/^#define ar [0-9]\+$/#define ar 12345/' <file> 

-i開關使sed將在原地的文件進行操作;第一次讓它打印到stdout並確保它做到了你想要的。

當然,從您的第一次描述中可以看出,您可能想要匹配的不僅僅是#define ar。以匹配所有兩個字母#define語句:

sed [-i] 's/^\(#define [a-z]\{2\}\) [0-9]\+$/\1 12345/` 

\1被換成任何由\(...\)組相匹配。

相關問題