复制包含一个或多个变量实例的行,然后在复制行中替换该变量

时间:2011-10-11 15:12:12

标签: regex sed grep

我可以使用正则表达式替换出现一次变量的行:

(^.*)(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 个答案:

答案 0 :(得分:1)

我无法在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}'

答案 1 :(得分:0)

AWK:

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

你的正则表达式也是为了替换。如果你只想要“原生正则表达式”它将是/ OLD /,替换将是“新”。