替换括号之间的文本

Chr*_*ris 2 sed awk text-processing regular-expression replace

awk '{ gsub(/BAR|WIBBLE/, "FOO"); print }'用来替换数据中的文本,如:

SOMETHING [BAR, WIBBLE]
SOMETHING [BAR]
Run Code Online (Sandbox Code Playgroud)

这给出了所需的结果:

SOMETHING [FOO, FOO]
SOMETHING [FOO]
Run Code Online (Sandbox Code Playgroud)

但是现在我不得不更新需要替换的文本,如下所示:

awk '{ gsub(/BAR|WIBBLE|ME/, "FOO"); print }'
Run Code Online (Sandbox Code Playgroud)

这将文本变成:

SOMETHING [ME, WIBBLE]
Run Code Online (Sandbox Code Playgroud)

进入:

SOFOOTHING [FOO, FOO]
Run Code Online (Sandbox Code Playgroud)

如何将我的替换限制为括号之间的文本(即SOMETHING单独保留)?

编辑

我还需要任何文本的稳健性SOMETHING(例如SHE GAVE ME THAT不应该ME被替换)。

man*_*ork 5

一定是这样awk吗?在替换的替换部分可以是函数调用的其他语言中要容易得多。例如perl

perl -pe 'sub c{$s=shift;$s=~s/BAR|WIBBLE|ME/FOO/g;$s}s/\[.*?\]/c$&/ge' 
Run Code Online (Sandbox Code Playgroud)