sed - 匹配一行的命令,只更改数字部分?

时间:2010-12-06 22:53:03

标签: sed

我将此作为目标文件:

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

我想用sed用不同的数字替换这些行中的数字(这是一个bash脚本)。但是,我不想在文件中的任何其他位置更改这些值。脚本无法直接知道这些值,因为它们可能与上面列出的不同。

基本上是这样的:

使用#define ar查找行,然后使用给定数字替换常规数字匹配。这可能与sed一起使用吗?

1 个答案:

答案 0 :(得分:4)

当然,这几乎是正则表达式的重点:

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

-i开关导致sed对文件进行就地操作;第一次让它离开,让它打印到stdout并确保它能达到你想要的效果。

当然,从您的第一次描述中,您可能希望匹配的不仅仅是#define ar。要匹配所有双字母#defines:

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

\1替换为\(...\)组匹配的任何内容。