正则表达式 - 仅限字母字符

时间:2017-01-14 15:13:04

标签: regex

我有一个快速的正则表达式问题。

我们说我有一个包列表:

packageA-0:8.39-6.fc24.x86_64 
packageB-0:6.4-1.fc24.x86_64
packageB-utils-0:3.63-2.fc24.x86_64

我想要的是:

packageA
packageB
packageB-utils

我已经尝试了

grep -oP '^[a-z]*' myfile.txt

awk -F"[_-]" '{print $1}' myfile.txt

有什么想法吗?我觉得我很接近,但我无法得到packageB-utils

3 个答案:

答案 0 :(得分:2)

.*?(?=-\d)
  • 。*? =>一切都不贪心
  • (?= - \ d)=>直到" - "接着是数字

答案 1 :(得分:1)

试试这个。选择最后一个字母表中的所有内容:

grep -o "^[a-zA-Z-]*[a-zA-Z]" file.txt

或者,如果您的包裹名称也包含数字,您可以使用sed删除-0:...之后的所有内容:

sed 's|-[0-9]*:.*||' file.txt

答案 2 :(得分:1)

sed使用分组:

sed -rn 's/([A-Za-z\-]+)\-(.*)/\1/p' packages.txt

应该屈服:

#packageA
#packageB
#packageB-utils

packages.txt包含:

packageA-0:8.39-6.fc24.x86_64 
packageB-0:6.4-1.fc24.x86_64
packageB-utils-0:3.63-2.fc24.x86_64