awk gsub正则后只打印匹配内容:使用match函数实现
使用awk命令结合gsub和match函数可以实现正则表达式匹配后只打印匹配到的内容。
例如,假设有一个文件test.txt,内容如下:
hello world
hello kitty
hi world
hi kitty
现在我们想要替换所有以'hello'开头的行,并只打印替换后的部分,可以使用以下命令:
awk '/^hello/{gsub(/hello/, 'hi'); if(match($0, /^hi(.*)/, arr)) print arr[1]}' test.txt
输出结果为:
world
kitty
解释:
- '/^hello/':匹配以'hello'开头的行
gsub(/hello/, 'hi'):将匹配到的'hello'替换为'hi'if(match($0, /^hi(.*)/, arr)):使用match函数匹配以'hi'开头的部分,并将匹配结果存入数组arr中print arr[1]:只打印arr数组中第一个元素,即匹配到的部分。
原文地址: https://www.cveoy.top/t/topic/ms9c 著作权归作者所有。请勿转载和采集!