grep 命令按字母顺序匹配包含字母的行

问题描述 投票:0回答:1

我需要帮助找出一个使用 grep 的正则表达式,该表达式将搜索文件并显示将 [a-z] 按字母顺序分别放入每个“集合”中的行(通过示例将变得清晰)

有效匹配示例:

a96d7e75-4432-41de-835c-625a636c1914 prefranks
b028224d-314b-4b03-a873-1436838f9233 escape

无效匹配示例:

c69f34e8-905e-4ce8-7893-a3e271d6f48c reconvince
e9db0700-f72b-4bea-ae37-e18ec6ca80d3 lumberjacks

我用过:

egrep '^([^a-f-]*a?[^a-f-]*b?[^a-f-]*c?[^a-f-]*d?[^a-f-]*e?[^a-f-]*f?-){4}[^a-f-]*a?[^a-f-]*b?[^a-f-]*c?[^a-f-]*d?[^a-f-]*e?[^a-f-]*f?[0-9]* ' text.txt

它没有给出任何无效的匹配项,但它遗漏了如下所示的有效示例,我不明白为什么:

6cd11113-bcf3-4f73-85f5-145b49225244 neoconservative
96239f18-5c62-495a-b1f8-50759443b885 fellest
51771125-b4d8-4cf8-a3d9-67117263f708 macular
a266f798-d772-47f0-9bdf-451939c2007e buntings
regex ubuntu grep
1个回答
0
投票

Grep 很难...

但鉴于:

$ cat file
a96d7e75-4432-41de-835c-625a636c1914 prefranks
b028224d-314b-4b03-a873-1436838f9233 escape
c69f34e8-905e-4ce8-7893-a3e271d6f48c reconvince
e9db0700-f72b-4bea-ae37-e18ec6ca80d3 lumberjacks

您可以使用红宝石:

ruby -lane 'puts $_ if $F[0].split(/-/).
                        map{|a| a.scan(/[a-zA-Z]/)}.
                        reject(&:empty?).all?{|a| a==a.sort}' file

打印:

a96d7e75-4432-41de-835c-625a636c1914 prefranks
b028224d-314b-4b03-a873-1436838f9233 escape
© www.soinside.com 2019 - 2024. All rights reserved.