Chinaunix

标题: awk中替换并保留正则匹配到的特征串 [打印本页]

作者: hujysh    时间: 2017-11-17 10:57
标题: awk中替换并保留正则匹配到的特征串
用sed可以实现
sed "s/abc\([A-Z]\)/XXX\1/" file
找到abc后跟大写字母,将这样的abc替换成XXX

awk中有gsub可以作替换,但没找到类似上面替换后保留作为特征串的大写字母的功能。

有谁知道awk中怎么实现吗?
作者: wh7211    时间: 2017-11-17 11:08
本帖最后由 wh7211 于 2017-11-17 11:18 编辑

回复 1# hujysh


  1. echo "123abcF456"|awk 'match($0,"(^[0-9]+)[a-z]+(F.*$)",t){print t[1]"XXX"t[2]}'
  2. echo "123abcF456"|awk '$0=gensub("(^[0-9]+)[a-z]+(F.*$)","\\1XXX\\2","g")'
复制代码

输出:
123XXXF456
作者: jason680    时间: 2017-11-17 12:33
回复 1# hujysh

$ echo '123abcABC123abcABC789' | perl -pe '{s/abc([A-Z])/XXX$1/}'
123XXXABC123abcABC789

$ echo '123abcABC123abcABC789' | perl -pe '{s/abc([A-Z])/XXX$1/g}'
123XXXABC123XXXABC789

$ echo '123abcABC123abcABC789' | awk '{$0=gensub("abc([A-Z])","XXX\\1",1,$0)}1'
123XXXABC123abcABC789

$ echo '123abcABC123abcABC789' | awk '{$0=gensub("abc([A-Z])","XXX\\1","g",$0)}1'
123XXXABC123XXXABC789






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2