使用sed将文件拆分为两个文件

时间:2017-02-12 19:49:17

标签: php regex sed

我有一个大约250M的文件,我想用它分成两个 ubuntu中的sed命令。

我要分割的行如下:

DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`

第二个文件应包含上述字符串。

1 个答案:

答案 0 :(得分:1)

您可以使用csplit工具:

Join

如果你真的想使用sed,你可以分两步完成:

pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`'
csplit infile /"$pattern"/

pattern='DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`' sed -n "/$pattern/q;p" infile > outfile1 sed -n "/$pattern/,\$p" infile > outfile2 会阻止打印作为默认操作;一旦到达模式行,-n就会退出,并且在此之前为每一行执行/$pattern/q

第二个命令只使用一个地址范围,从模式行到最后一个p。由于该命令是双引号以获取$,因此最后一行的$pattern必须转义$

或者你可以用awk进行一次传递:

\$

第一个模式检查线是否与我们的分割线匹配,如果是,则增加一个标志;第二行检查标志是否设置,如果是,则打印到第二个输出文件并跳过最后一个模式/动作;如果未设置标志,则执行第三个操作并打印到第一个输出行。