我使用sed将文件拆分为两个
我有一个自定义分隔符“/ -sep- /”的文件,我想将文件拆分为
目前我有:
sed -n '1,/-sep-/ {p}' /export/data.temp > /export/data.sql.md5
sed -n '/-sep-/,$ {p}' /export/data.temp > /export/data.sql
但文件1末尾包含/ -sep- /,文件2以/ -sep开头 - /
我该如何处理?
请注意,在文件中我应该删除一个断行和/ -sep- /并在文件2上删除/ -sep- /和一个断行:S
答案 0 :(得分:3)
反转它:告诉它不打印的内容。
sed '/-sep-/Q' /export/data.temp > /export/data.sql.md5
sed '1,/-sep-/d'/export/data.temp > /export/data.sql
(关于断行,我不明白。示例输入可能会有所帮助。)
顺便说一句,您的原始代码只需要少量添加就可以完成您想要的操作:
sed -n '1,/-sep-/{/-sep-/!p}' /export/data.temp > /export/data.sql.md5
sed -n '/-sep-/,${/-sep-/!p}' /export/data.temp > /export/data.sql
答案 1 :(得分:3)
$ cat >testfile
a
a
a
a
/-sep-/
b
b
b
b
然后
$ csplit testfile '/-sep-/' '//'
8
8
8
$ head -n 999 xx*
==> xx00 <==
a
a
a
a
==> xx01 <==
/-sep-/
==> xx02 <==
b
b
b
b
答案 2 :(得分:1)
sed -n '/-sep-/q; p' /export/data.temp > /export/data.sql.md5
sed -n '/-sep-/,$ {p}' /export/data.temp | sed '1d' > /export/data.sql
使用awk一次传递可能更容易:
awk -v out=/export/data.sql.md5 -v f2=/export/data.sql '
/-sep-/ { out=f2; next}
{ print > out }
' /exourt/data.temp