ros*_*ser 11 regex unix bash shell scripting
嗨,大家好,我希望这个主题足够清楚,我在前面提到过的bin中没有找到任何具体的内容.我试过在Perl或Python中实现它,但我想我可能会努力.
是否有一个简单的shell命令/管道将基于开始和结束正则表达式将我的4mb .txt文件拆分成单独的.txt文件?
我提供了以下文件的简短示例..因此您可以看到每个"故事"都以短语"X XXX 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
...
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
罗斯
kur*_*umi 22
awk '/[0-9]+ of [0-9]+ DOCUMENTS/{g++} { print $0 > g".txt"}' file
Run Code Online (Sandbox Code Playgroud)
OSX用户将需要
gawk
,因为内置awk
将产生一个错误awk: illegal statement at source line 1
红宝石(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
Run Code Online (Sandbox Code Playgroud)
ℝap*_*ink 10
正如其他解决方案中所建议的那样,您可以使用csplit
:
csplit csplit.test '/^\.\.\./' '{*}' && sed -i '/^\.\.\./d' xx*
Run Code Online (Sandbox Code Playgroud)
我还没有找到一种更好的方法来摆脱拆分文件中的怀旧分隔符.