2010-12-06 3 views
1

私は私のターゲットファイルとしてこれを持っている:sed - 行を照合し、数値部分のみを変更するコマンドですか?

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

私は(これを実行すると、bashスクリプトである)SEDを使用して別の番号で、これらの線で数字だけを交換したいです。しかし、私はこれらの値をファイル内の他の場所で変更したくありません。スクリプトは、上記の値とは異なる可能性があるため、値を直接知ることはできません。そこで、基本的

#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が交換されます。

関連する問題