我有一个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
但是如何扫描下几行以应用逻辑的保留或拒绝部分?
编辑:注意,在编写自定义解析器之前,我试图查看使用命令行工具执行此操作是否合理。我知道如何编写解析器。
答案 0 :(得分:-1)
您还没有详细说明您的问题以推荐特定解决方案,但有许多工具和技术可以解决此类问题。
据我了解,你想要
我对此的一般处理方法是使用基于"打开旧文件和新文件的逻辑的脚本;写下您从旧文件中读取的所有内容,除非。"
你可以轻松地写东西,直到你进入课堂(一个标志)并开始寻找方法(另一个标志)。这里稍微有点棘手的部分是缓冲:你需要保留每个方法的文本,直到你知道它是否包含目标文本。您可以读取整个方法(次要解析任务)并搜索目标,或者只是保持文本行直到找到目标(然后返回到全部写入模式)或运行结束(空没有写的缓冲区。)
这足以让你用任何方便的语言拼出脚本来处理问题。 UNIX提供了各种工具;在 范例中,我使用 awk 。但是,我建议使用读取友好的工具,例如Python或Perl。如果你想正式进入解析世界,我建议一个简单的Lex-YACC对联:你可以有非常简单的标记(甚至可能是完整的行,取决于你的编码风格)和动作(写行,保持行,设置状态)标志,冲洗缓冲区等。)。
这足以让你感动吗?