如何grep像这样的字符串?

时间:2016-05-05 11:35:31

标签: linux unix text grep find

的字符串:

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 '.-.-.-.-.'

但没有发生任何事情

2 个答案:

答案 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次
相关问题