Git 使用Unix实用程序(如grep和sed)拆分文本文件

Git 使用Unix实用程序(如grep和sed)拆分文本文件,git,shell,sed,grep,dynamics-nav,Git,Shell,Sed,Grep,Dynamics Nav,我对Unix实用程序还不熟悉,但我正在尝试学习一些新的东西,并尝试将我的简单ruby脚本转换为某种shell脚本来做同样的事情。但我不知道如何完成这项任务 我需要分割一个包含几个小对象的大文件。每个对象都以如下行开头:对象类型编号名称 当我使用Ruby时,我在遍历文件行,如果我找到了模式,我就开始将行转储到文件中。直到我再次找到这个模式 完成后,我会收到一堆小文件,而不是一个大文件 但是,使用shell脚本和Unix实用程序也可以这样做吗?格雷普,塞德。。。不调用perl,ruby 编辑:我正在

我对Unix实用程序还不熟悉,但我正在尝试学习一些新的东西,并尝试将我的简单ruby脚本转换为某种shell脚本来做同样的事情。但我不知道如何完成这项任务

我需要分割一个包含几个小对象的大文件。每个对象都以如下行开头:对象类型编号名称

当我使用Ruby时,我在遍历文件行,如果我找到了模式,我就开始将行转储到文件中。直到我再次找到这个模式

完成后,我会收到一堆小文件,而不是一个大文件

但是,使用shell脚本和Unix实用程序也可以这样做吗?格雷普,塞德。。。不调用perl,ruby

编辑:我正在尝试使用Windows开发自定义git命令。因此,我只能使用msysgit附带的实用程序

所创建对象的文件名模式为Type-Number.txt

更新:多亏@perreal我想出了以下代码,它实现了我想要的。希望其他使用git的Dynmaics NAV开发人员会发现这个git对象拆分器很有用:


我认为您正在寻找一个“上下文拆分”命令:csplit

$ csplit filename '/OBJECT/'

我认为您正在寻找一个“上下文拆分”命令:csplit

$ csplit filename '/OBJECT/'

基于awk的解决方案是否可以接受?您想要什么形式的输出文件名?csplit上下文拆分可以满足您的需要。@igustin,是的,awk可以。基于awk的解决方案是否可以接受可能的重复?您想要什么形式的输出文件名?csplit上下文拆分可能会满足您的需要。@igustin,是的,awk可以。您的意思是csplit filename/OBJECT/可能重复,但是是的,您对csplit有正确的想法。很遗憾,msysgit没有附带csplit。您的意思是csplit filename/OBJECT/但是是的,您对csplit的想法是正确的。很遗憾,msysgit没有附带csplit。我知道了,谢谢!在接受答案之前,让我先测试一下这种方法。由于“头行”没有传递到输出文件,所以这种方法有点不正确。但这很简单…我知道了,谢谢!在接受答案之前,让我先测试一下这种方法。由于“头行”没有传递到输出文件,所以这种方法有点不正确。但这是最简单的一个。。。
awk '{ 
  if (/(OBJECT.*)/) {
    file = OBJECT$2$3$4
    print > file
  } else {
    print >> file
  }
}' input_file