我有一个快速的正则表达式问题。
我们说我有一个包列表:
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
答案 0 :(得分:2)
.*?(?=-\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