可以使用awk中的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正则后只打印匹配到的

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

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