Regex 使用多个模式对Grep输出进行排序

Regex 使用多个模式对Grep输出进行排序,regex,macos,unix,command-line,grep,Regex,Macos,Unix,Command Line,Grep,我正在搜索的文件(fruit.text)看起来像下面的代码片段,数据以我无法控制的随机顺序出现 …水果=苹果,…数量=3,…状况=不良 …数量=4,…状态=很棒,…水果=橙色 …条件=正常,…数量=2,…水果=香蕉 我的Grep命令是:Grep-Eo'fruit.[^,]*'\\\\\'qty.[^,]*'\\\\'condition.[^,]*'fruit.txt 这将产生如下输出: 水果=苹果 数量=3 条件=坏 数量=4 条件=很好 水果=橘子 条件=正常 数量=2 水果=香蕉 这是正确的

我正在搜索的文件(fruit.text)看起来像下面的代码片段,数据以我无法控制的随机顺序出现

…水果=苹果,…数量=3,…状况=不良

…数量=4,…状态=很棒,…水果=橙色

…条件=正常,…数量=2,…水果=香蕉

我的Grep命令是:
Grep-Eo'fruit.[^,]*'\\\\\'qty.[^,]*'\\\\'condition.[^,]*'fruit.txt

这将产生如下输出:

水果=苹果

数量=3

条件=坏

数量=4

条件=很好

水果=橘子

条件=正常

数量=2

水果=香蕉

这是正确的,但是,我正在寻找按照我在grepcmd中指定的顺序排列的输出。即,与以下内容完全相同:

水果=苹果

数量=3

条件=坏

水果=橘子

数量=4

条件=很好

水果=香蕉

数量=2

条件=正常

使用gawk的解决方案:

首先,我在输入中添加了一些额外的“,”:

....,fruit=apple,...,qty=3,...,condition=bad,....
...,qty=4,...,condition=great,...,fruit=orange,...
...,condition=ok,...,qty=2,...,fruit=banana,...
然后我写了这个awk脚本(fruit.awk):


在某些步骤中使用
sed

sed -E 's/^/,/;
        s/(.*),(condition[^,]*)/\2\r,\1/;
        s/(.*),(qty=[^,]*)/\2,\1/;
        s/(.*),(fruit=[^,]*)/\2,\1/;
        s/\r.*//;
        s/,/\n/g' input.txt
我首先插入一个
作为输入,其中感兴趣的数据从第一个字段开始。
条件之后
我添加了一个
\r
,这样我可以在找到水果后移除垃圾

fruit=apple
qty=3
condition=bad
fruit=orange
qty=4
condition=great
fruit=banana
qty=2
condition=ok
sed -E 's/^/,/;
        s/(.*),(condition[^,]*)/\2\r,\1/;
        s/(.*),(qty=[^,]*)/\2,\1/;
        s/(.*),(fruit=[^,]*)/\2,\1/;
        s/\r.*//;
        s/,/\n/g' input.txt