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]*
      中,对吗?