我正在尝试csplit
在 BASH 中使用 1500-1600 的年份分隔文件作为分隔符。
当我执行命令时
csplit Shakespeare.txt '/1[56]../' '{36}'
它几乎可以工作,除了至少两个问题:
xx00
这将输出 38 个文件,而不是 36 个,编号为xx37
. (也xx00
完全空白。)我不明白这怎么可能。- 其中一个文件(为什么似乎
csplit
返回 37 个非空文件而不是我预期的 36 个非空文件)不是以 15XX 或 16XX 开头——它以“ACT 4 SCENE 15\n”开头(其中 \n 应该表示换行符或换行符)。我不明白如何csplit
将新行/换行符与数字匹配。
当我执行命令时(这就是我想要的)
csplit Shakespeare.txt '/1[56][0-9][0-9]/' '{36}'
终端返回错误:csplit: 1[56][0-9][0-9]: no match
加上在执行上述操作时列出的所有数字。
这对我来说尤其没有意义,因为grep
另有说明:
grep -c "1[56][0-9][0-9]" Shakespeare.txt
36
grep -c "1[56].." Shakespeare.txt
36
注: man csplit
表示我有2005年1月26日以后的BSD版本。man grep
表示我有2010年7月28日以后的BSD版本。