首页 > 解决方案 > 在文件末尾匹配后拆分文件并将匹配保留在文件 unix 中

问题描述

我有一个包含随机行和关键词END的文件:

line 1
line 2
...
line 23
END
line 25
....
line 40
END

我想根据关键字 END 将其拆分为多个文件,并将其放在每个文件中:文件 1

line 1
line 2
...
line 23
END

文件 2

line 25
.....
line 40
END

我试过了:

csplit -k file_name '/END/' '{*}' but i do not get the correct output.

标签: unixawksplitcsplit

解决方案


向正则表达式添加偏移量 1 以将匹配项包含END在当前文件中。我还添加^$锚定了正则表达式。

csplit -k file -f file --elide-empty-files '/^END$/1' '{*}'
  • -f file设置输出文件名前缀
  • --elide-empty-files这是一个 GNU 扩展并且不输出空文件(在这种情况下是一个空文件file02

输出:

$ head file0*
==> file00 <==
line 1
line 2
...
line 23
END

==> file01 <==
line 25
....
line 40
END

推荐阅读