可以 grep 文件查找模式,然后根据模式的部分对找到的行进行排序吗?

tam*_*ler 4 regex grep

我将许多单独序列化的 PHP 数组存储到一个文件中。文件的每一行都包含一个序列化数组。例如:

a:2:{s:4:"name";s:8:"John Doe";s:3:"age";s:2:"20";}
a:2:{s:4:"name";s:8:"Jane Doe";s:3:"age";s:2:"15";}
a:2:{s:4:"name";s:12:"Steven Tyler";s:3:"age";s:2:"35";}
a:2:{s:4:"name";s:12:"Jim Morrison";s:3:"age";s:2:"25";}
a:2:{s:4:"name";s:13:"Apple Paltrow";s:3:"age";s:2:"75";}
a:2:{s:4:"name";s:12:"Drew Nickels";s:3:"age";s:2:"34";}
a:2:{s:4:"name";s:11:"Jason Proop";s:3:"age";s:2:"36";}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

是否可以 grep 该文件以获取以下模式:"name"*"*"

然后,我想根据第二个通配符的内容对找到的行进行排序。

Ope*_*uce 5

我不确定 grep 是从哪里来的,因为你的所有行似乎都与模式匹配。但无论如何,您可以sort单独使用它来对示例输入进行排序:

sort -t\" -k4 data.txt
Run Code Online (Sandbox Code Playgroud)

它忽略了文本的“真实”结构,只是将其视为"分隔符,因此它既快速又肮脏,但它可以按照您想要的方式进行排序。这是在行动中:

http://ideone.com/ZugIX

如果您确实需要 grep for "name".*".*",您可以先执行此操作并将输出通过管道传输到命令sort