Regex 正则表达式--仅对字母字符进行grepping
我有一个快速的正则表达式问题 假设我有一个包列表:Regex 正则表达式--仅对字母字符进行grepping,regex,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 及 有什么想法吗?我想我有点接近了,但我就是无法获得packageB utils .*?(?=-
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
及
有什么想法吗?我想我有点接近了,但我就是无法获得packageB utils
.*?(?=-\d)
- *?=>一切都不贪婪
- (?=-\d)=>直到“-”后跟一个数字
- *?=>一切都不贪婪
- (?=-\d)=>直到“-”后跟一个数字
- 试试这个。选择直到最后一个字母的所有内容:
grep -o "^[a-zA-Z-]*[a-zA-Z]" file.txt
或者,如果包名也包含数字,则可以使用sed
删除-0:…
:
sed 's|-[0-9]*:.*||' file.txt
试试这个。选择直到最后一个字母的所有内容:
grep -o "^[a-zA-Z-]*[a-zA-Z]" file.txt
或者,如果包名也包含数字,则可以使用sed
删除-0:…
:
sed 's|-[0-9]*:.*||' file.txt
使用
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
使用
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
嗯。因为
-
不在[a-z]*
中,对吗?嗯。因为-
不在[a-z]*
中,对吗?