使用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数组中第一个元素,即匹配到的部分。
awk gsub正则后只打印匹配内容:使用match函数实现

原文地址: https://www.cveoy.top/t/topic/ms9c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录