regex - 使用 BASH 中的 shell 脚本在正则表达式上将一个大的 txt 文件拆分为 200 个较小的 txt 文件

标签 regex bash shell unix scripting

我希望主题足够清楚,我在之前询问的 bin 中没有找到任何关于此的具体信息。我尝试过在 Perl 或 Python 中实现它,但我认为我可能太努力了。

是否有一个简单的 shell 命令/管道可以根据开始和结束的正则表达式将我的 4mb .txt 文件拆分为单独的 .txt 文件?

我在下面提供了一个简短的文件示例。因此您可以看到每个“故事”都以短语“X of XXX DOCUMENTS”开头,这可用于拆分文件。

我认为这应该很容易,如果 bash 做不到我会感到惊讶 - 比 Perl/Py 更快。

这里是:

                           1 of 999 DOCUMENTS


              Copyright 2011 Virginian-Pilot Companies LLC
                          All Rights Reserved
                   The Virginian-Pilot(Norfolk, VA.)

...



                           3 of 999 DOCUMENTS


                  Copyright 2011 Canwest News Service
                          All Rights Reserved
                          Canwest News Service

...

预先感谢您的所有帮助。

罗斯

最佳答案

awk '/[0-9]+ of [0-9]+ DOCUMENTS/{g++} { print $0 > g".txt"}' file

OSX users will need gawk, as the builtin awk will produce an error like awk: illegal statement at source line 1

ruby (1.9+)

#!/usr/bin/env ruby
g=1
f=File.open(g.to_s + ".txt","w")
open("file").each do |line|
  if line[/\d+ of \d+ DOCUMENTS/]
    f.close
    g+=1
    f=File.open(g.to_s + ".txt","w")
  end
  f.print line
end

关于regex - 使用 BASH 中的 shell 脚本在正则表达式上将一个大的 txt 文件拆分为 200 个较小的 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952021/

相关文章:

php - 删除从最后一次出现的特定字符序列开始的所有字符

bash - 无法在 Jenkins 管道作业中通过 DSL (groovy) 存储 sh 命令输出

linux - 使用 wget 使用临时目录下载和安装的理想方法?

linux - 新的 bash 命令有命名约定吗?

python - 如何在 python shell 中将所有变量写入 JSON 文件

linux - 如何来回反向搜索?

javascript - 搜索 2 个字符串中的占位符值

javascript - 验证文件时在正则表达式中允许空格

python - 类型错误 : expected string or buffer

c - 使用 VS Code、Makefile 和自定义 bash 脚本在 C 语言中调试头文件