【发布时间】:2026-01-03 04:25:02
【问题描述】:
我有以下输入:
TAG1 VALUE1;TAG2 VALUE2;sometext;TAG3 VALUE3;sometext;TAG4 VALUE4;TAG5 VALUE5;sometext
TAG1 VALUE1;sometext;TAG3 VALUE3;sometext;TAG4 VALUE4;TAG5 VALUE5;sometext
TAG1 VALUE1;TAG2 VALUE2;sometext;TAG3 VALUE3;sometext;TAG4 VALUE4;TAG5 VALUE5
TAG1 VALUE1;TAG2 VALUE2;sometext;TAG3 VALUE3;sometext;TAG5 VALUE5;sometext
TAG1 VALUE1;TAG2 VALUE2;sometext;
我需要以下输出:
TAG2 VALUE2;TAG3 VALUE3;TAG5 VALUE5;
TAG3 VALUE3;TAG5 VALUE5;
TAG2 VALUE2;TAG3 VALUE3;TAG5 VALUE5;
TAG2 VALUE2;TAG3 VALUE3;TAG5 VALUE5;
TAG2 VALUE2;
或者,或者与上面相同,但只有值
我尝试了以下方法:
grep -oP '(?<=TAG2 ).*?(?=;)|(?<=TAG3 ).*?(?=;)|(?<=TAG5 ).*?(?=;)'
它有效,但每个值都在单独的行中:
VALUE2
VALUE3
VALUE5
我不能假设所有的行都会有所有的标签,所以我真的需要每行输入就需要一行输出。首选原生 Linux 工具 - sed、awk、grep 等。
谢谢!
【问题讨论】: