免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1627 | 回复: 6
打印 上一主题 下一主题

[文本处理] vi如何删除有规律的一段数据? [复制链接]

论坛徽章:
3
15-16赛季CBA联赛之辽宁
日期:2017-12-28 12:15:1015-16赛季CBA联赛之福建
日期:2017-12-28 12:26:5115-16赛季CBA联赛之新疆
日期:2018-03-07 15:09:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-07-05 17:38 |只看该作者 |倒序浏览
create table SH.ADMIN_AUTHORITY
(
  authorityid   NUMBER(6) not null,
  authorityname VARCHAR2(255) not null,
  moduleid      NUMBER(6) not null
)
tablespace DATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 1M
    next 1M
    minextents 1
    maxextents unlimited
  );

以上一段文本只是一个样本,
它的样式,可以归纳为以create table 开头,跨越多行,知道第一个;

如何用vi删除这些又规律的,跨行的文本?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2017-07-05 21:29 |只看该作者
:set nu 显示行号
:5,21d 删掉第5行到第21行

1 a
2 b
3 c
4 d
5 create table SH.ADMIN_AUTHORITY
6 (
7   authorityid   NUMBER(6) not null,
8   authorityname VARCHAR2(255) not null,
9   moduleid      NUMBER(6) not null
10 )
11 tablespace DATA
12   pctfree 10
13   initrans 1
14   maxtrans 255
15   storage
16   (
17     initial 1M
18     next 1M
19     minextents 1
20     maxextents unlimited
21   );
22 e
23 f
24 g

论坛徽章:
3
15-16赛季CBA联赛之辽宁
日期:2017-12-28 12:15:1015-16赛季CBA联赛之福建
日期:2017-12-28 12:26:5115-16赛季CBA联赛之新疆
日期:2018-03-07 15:09:17
3 [报告]
发表于 2017-07-06 01:15 |只看该作者
以上一段文本只是一个样本,被分析的文件中有数百这种样式的一段文字。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2017-07-06 10:39 |只看该作者
这种需求用awk吧

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
5 [报告]
发表于 2017-07-06 10:54 |只看该作者

  1. sed '/^create table/,/;/d' a.sql
复制代码

?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2017-07-06 10:56 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $del = 0;
  5. while(<>){
  6.         $del = 1 if(/\Acreate\s+table/);
  7.         if($del){
  8.                 $del = 0 if(/;/);
  9.                 next;
  10.         }
  11.         print;
  12. }
复制代码

perl abc.pl urFile

论坛徽章:
3
15-16赛季CBA联赛之辽宁
日期:2017-12-28 12:15:1015-16赛季CBA联赛之福建
日期:2017-12-28 12:26:5115-16赛季CBA联赛之新疆
日期:2018-03-07 15:09:17
7 [报告]
发表于 2017-07-06 23:30 |只看该作者

谢谢,perl不会,我用shell脚本实现了,
这样有点难度的逻辑应该是不会用一个命令就能实现的,

[root@Dev-Mysql tmp]# cat analyzer.sh
#!/bin/bash
SED=/bin/sed
GREP=/bin/grep
HEAD=/usr/bin/head
OBJ_F=/tmp/GDATADB_02.sql
RES_D=/tmp
RES_F=${RES_D}/op.sql
CRT_N=`${GREP} -n "create table" ${OBJ_F}  | ${HEAD} -1 | ${SED} s/:.*$//`
COM_N=0
until [ -z ${CRT_N} ]
do
       CRT_N=$[${CRT_N}-1]
       ${HEAD} -${CRT_N} ${OBJ_F} >>$RES_F
       echo >>$RES_F
       ${SED} -i "1,${CRT_N}d" ${OBJ_F}
       COM_N=`${GREP} -n ";" ${OBJ_F} | ${HEAD} -1 | ${SED} s/:.*$//`
       ${SED} -i "1,${COM_N}d" ${OBJ_F}
       COM_N=0
       CRT_N=`${GREP} -n "create table" ${OBJ_F}  | ${HEAD} -1 | ${SED} s/:.*$//`
       if [ -z ${CRT_N} ]
       then
       ${HEAD} -1000 ${OBJ_F} >>$RES_F
       >${OBJ_F}
       fi
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP