Дублируйте строку, содержащую один или несколько экземпляров переменной, а затем замените эту переменную в дублированной строке - PullRequest
0 голосов
/ 11 октября 2011

Я могу заменить строки на одно вхождение переменной, используя регулярное выражение:

(^.*)(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 
};

, который является правильным для одного вхождения переменной `OLD ', но не более чем с одним.

Я могу понять, почему регулярное выражение не будет работать для нескольких вхождений,но я не знаю, как его улучшить.

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Я не могу сказать, как это сделать в диалоговом окне замены в вашей 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 голосов
/ 12 октября 2011

AWK:

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

Ваше регулярное выражение также было заменено. Если вы хотите использовать только «нативное регулярное выражение», это будет / OLD /, замена будет «NEW».

...