如何根据正则表达式将文件内容分类到不同的组?

时间:2015-12-15 04:58:41

标签: regex bash

我有一个平面文件,其中包含系统中存在的软件包列表。我想知道包是否

  1. 批处理组件(通常,名称以batch开头),
  2. 服务(名称以serv结尾)
  3. 消息传递守护程序(名称以d结尾)
  4. 一个网络组件(名称以web结尾)
  5. 和那些不属于任何类别的人(意思是不按照惯例命名)
  6. 我为此写了这个bash脚本:

    grep serv$ pack_list.txt > serv_list.txt
    grep d$ pack_list.txt > daemon_list.txt
    grep ^batch pack_list.txt > batch_list.txt
    grep web$ pack_list.txt > web_list.txt
    grep -v serv$ pack_list.txt | grep -v d$ | grep -v ^batch | grep -v web$ > uncat_list.txt
    

    虽然它满足了我目前的要求并且没有花费太多时间,但我不禁想知道其他语言是否会成为这类操作的更好选择。

    ---编辑 -

    示例输入为:

    fileserv
    batch_file_processor
    userweb
    processord
    

    每个人都会进入另一个档案。

    澄清我在寻找的东西:我正在寻找一种语言,这种处理方式比语法支持更好:

    1. 每个正则表达式都有grep之类的命令。
    2. 像Python或Perl这样的一系列if条件都可以。
    3. 有些事情:

      switch line.match($1):
          case (pattern1):
                ...
          case (pattern2):
                ...
      

      有什么建议吗?

1 个答案:

答案 0 :(得分:2)

单个Awk流程可以更好地做到这一点,对于与您的模式匹配的每一行并适当地重定向输出:

Stackoverflow