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
被替换)。
一定是这样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)