Text-Processing
替換括號之間的文本
我
awk '{ gsub(/BAR|WIBBLE/, "FOO"); print }'
用來替換數據中的文本,例如:SOMETHING [BAR, WIBBLE] SOMETHING [BAR]
這給出了所需的結果:
SOMETHING [FOO, FOO] SOMETHING [FOO]
但現在我不得不將需要替換的文本更新為:
awk '{ gsub(/BAR|WIBBLE|ME/, "FOO"); print }'
它將文本變為:
SOMETHING [ME, WIBBLE]
進入:
SOFOOTHING [FOO, FOO]
如何將我的替換限制為括號之間的文本(即不理會
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'
使用 GNU awk,您可以設置
RS
括號的內容,然後在RT
(匹配的記錄分隔符)上進行替換:awk -v RS='\\[[^]]*\\]' '{ gsub(/\<(BAR|WIBBLE|ME)\>/, "FOO", RT); printf "%s%s", $0, RT }' infile
文件:
cat << EOF > infile SHE GAVE ME THAT SOMETHING [ME, WIBBLE, SOMMER] EOF
輸出:
SHE GAVE ME THAT SOMETHING [FOO, FOO, SOMMER]