Regex 使用多个模式对Grep输出进行排序
我正在搜索的文件(fruit.text)看起来像下面的代码片段,数据以我无法控制的随机顺序出现 …水果=苹果,…数量=3,…状况=不良 …数量=4,…状态=很棒,…水果=橙色 …条件=正常,…数量=2,…水果=香蕉 我的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 水果=香蕉 这是正确的
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