的字符串:
4b30a444-86c9-4fb8-b5dc-ba721e30fb24
a8e4e6a8-5655-4adc-a393-ccbb6848c9dc
cc1918be-a532-4ebe-948a-de78cc455fcb
12b6e407-4ec0-4cc6-80d4-b38d7df99694
5b153e1f-6abd-4fd9-9ce2-c7917010f3ee
我试过这些:
egrep [a-z0-9]-[a-z0-9]-[a-z0-9]-[a-z0-9]-[a-z0-9]
egrep '[a-z]{2,}-[a-z]{2,}-[a-z]{2,}-[a-z]{2,}-[a-z]{2,}'
egrep '.-.-.-.-.'
但没有发生任何事情
答案 0 :(得分:2)
将+
用于该字符类的1个或多个字符,如下所示:
$ egrep '[a-z0-9]+-[a-z0-9]+-[a-z0-9]+-[a-z0-9]+-[a-z0-9]+' data
4b30a444-86c9-4fb8-b5dc-ba721e30fb24
a8e4e6a8-5655-4adc-a393-ccbb6848c9dc
cc1918be-a532-4ebe-948a-de78cc455fcb
12b6e407-4ec0-4cc6-80d4-b38d7df99694
5b153e1f-6abd-4fd9-9ce2-c7917010f3ee
$
或使用如下量词的固定数量的字符:
$ egrep '[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}' data
4b30a444-86c9-4fb8-b5dc-ba721e30fb24
a8e4e6a8-5655-4adc-a393-ccbb6848c9dc
cc1918be-a532-4ebe-948a-de78cc455fcb
12b6e407-4ec0-4cc6-80d4-b38d7df99694
5b153e1f-6abd-4fd9-9ce2-c7917010f3ee
或者您可以将{2,}
用于2个或更多个字符:
$ egrep '[a-z0-9]{2,}-[a-z0-9]{2,}-[a-z0-9]{2,}-[a-z0-9]{2,}-[a-z0-9]{2,}' data
4b30a444-86c9-4fb8-b5dc-ba721e30fb24
a8e4e6a8-5655-4adc-a393-ccbb6848c9dc
cc1918be-a532-4ebe-948a-de78cc455fcb
12b6e407-4ec0-4cc6-80d4-b38d7df99694
5b153e1f-6abd-4fd9-9ce2-c7917010f3ee
答案 1 :(得分:1)
我推荐使用Perl风格的正则表达式,因为它更接近我们以前在编程语言中使用的表达式:
c='[a-z0-9]'
grep -P "$c{8}(?:-$c{4}){3}-$c{12}" input.txt
这里我们将重复的序列保存到$c
shell变量中。
-P
指示grep
使用Perl样式{N}
重复前一个词组N
次(?:)
创建非捕获组以提高效率(我们可能只使用()
)(?:...){3}
重复该组内容3次