Sed 从单个文本文件创建多个文本文件,在重复的相同模式之间找到文本

Sed 从单个文本文件创建多个文本文件,在重复的相同模式之间找到文本,sed,grep,Sed,Grep,我有一个如下格式的文本文件: 图案 信息 图案 不同信息 图案 更多不同的信息 重复50次。我想用这个文件创建50个文件,每个文件只包含: 图案 无论下面是什么信息,在下一个标题之前停止 要清楚的是,模式在所有50次中都是完全相同的,然后它下面有唯一的数据 有人能告诉我如何使用grep或sed之类的工具吗 谢谢试试: awk '/pattern/{close(f); f="file" ++c ".out"} f{print>f}' file 这将创建文件file1.out、file2.o

我有一个如下格式的文本文件:

图案

信息

图案

不同信息

图案

更多不同的信息

重复50次。我想用这个文件创建50个文件,每个文件只包含:

图案

无论下面是什么信息,在下一个标题之前停止

要清楚的是,模式在所有50次中都是完全相同的,然后它下面有唯一的数据

有人能告诉我如何使用grep或sed之类的工具吗

谢谢

试试:

awk '/pattern/{close(f); f="file" ++c ".out"} f{print>f}' file
这将创建文件file1.out、file2.out等,其信息以
模式开始

工作原理
  • /pattern/{close(f);f=“file”++c.out”}

    每次我们看到一行匹配正则表达式
    模式
    ,关闭文件
    f
    ,并为
    f
    指定一个新名称
    c
    是一个计数器,每当我们看到
    模式时,它都会递增

  • f{print>f}

    如果
    f
    为非空(意味着我们已经看到了第一次出现的
    模式
    ),则将当前行打印到文件
    f

例子 让我们从这个示例文件开始:

$ cat file
pattern
info
pattern
different info
pattern
more different info
现在,让我们运行命令并查看它创建的输出文件:

$ awk '/pattern/{close(f); f="file" ++c ".out"} f{print>f}' file
$ cat file1.out
pattern
info
$ cat file2.out
pattern
different info
$ cat file3.out
pattern
more different info
您可以使用split

split -l 4 infile

定义新文件命名约定