unix工具在命令行上解析文件

时间:2017-09-13 16:10:14

标签: python unix command-line-tool command-line-parsing

我有一个python脚本,看起来像我要转换的以下内容:

import sys
# more imports


''' some comments '''

class Foo:
   def _helper1():
      etc.

   def _helper2():
      etc.

   def foo1():
      d = { a:3, b:2, c:4 }
      etc.

   def foo2():
      d = { a:2, b:2, c:7 }
      etc.

   def foo3():
      d = { a:3, b:2, c:7 }
      etc.

   etc.

   if __name__ == "__main__":    
      etc.

我希望能够解析foo*()函数并保留具有某些属性的函数,例如d={a:3, b:2}。显然保留非foo*()的所有其他内容,以便转换仍然可以运行。虽然foo*()可能有不同的键值,但d定义明确。

是否有一些unix工具可以通过链接来实现?我可以使用grep来识别foo但是如何扫描下几行以应用逻辑的保留或拒绝部分?

编辑:注意,在编写自定义解析器之前,我试图查看使用命令行工具执行此操作是否合理。我知道如何编写解析器。

1 个答案:

答案 0 :(得分:-1)

您还没有详细说明您的问题以推荐特定解决方案,但有许多工具和技术可以解决此类问题。

据我了解,你想要

  1. 确定班级的界限
  2. 确定班级中的方法
  3. 删除缺少某些文字功能的方法
  4. 我对此的一般处理方法是使用基于"打开旧文件和新文件的逻辑的脚本;写下您从旧文件中读取的所有内容,除非。"

    你可以轻松地写东西,直到你进入课堂(一个标志)并开始寻找方法(另一个标志)。这里稍微有点棘手的部分是缓冲:你需要保留每个方法的文本,直到你知道它是否包含目标文本。您可以读取整个方法(次要解析任务)并搜索目标,或者只是保持文本行直到找到目标(然后返回到全部写入模式)或运行结束(空没有写的缓冲区。)

    这足以让你用任何方便的语言拼出脚本来处理问题。 UNIX提供了各种工具;在 范例中,我使用 awk 。但是,我建议使用读取友好的工具,例如Python或Perl。如果你想正式进入解析世界,我建议一个简单的Lex-YACC对联:你可以有非常简单的标记(甚至可能是完整的行,取决于你的编码风格)和动作(写行,保持行,设置状态)标志,冲洗缓冲区等。)。

    这足以让你感动吗?