我有一个大约250M的文件,我想用它分成两个
ubuntu中的sed
命令。
我要分割的行如下:
DROP TABLE IF EXISTS `captcha_log`CREATE TABLE IF NOT EXISTS `captcha_log`
第二个文件应包含上述字符串。
答案 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进行一次传递:
\$
第一个模式检查线是否与我们的分割线匹配,如果是,则增加一个标志;第二行检查标志是否设置,如果是,则打印到第二个输出文件并跳过最后一个模式/动作;如果未设置标志,则执行第三个操作并打印到第一个输出行。