Chinaunix
标题:
vi如何删除有规律的一段数据?
[打印本页]
作者:
XQKA
时间:
2017-07-05 17:38
标题:
vi如何删除有规律的一段数据?
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删除这些又规律的,跨行的文本?
作者:
Shell_HAT
时间:
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
作者:
XQKA
时间:
2017-07-06 01:15
以上一段文本只是一个样本,被分析的文件中有数百这种样式的一段文字。
作者:
关阴月飞
时间:
2017-07-06 10:39
这种需求用awk吧
作者:
moperyblue
时间:
2017-07-06 10:54
sed '/^create table/,/;/d' a.sql
复制代码
?
作者:
sunzhiguolu
时间:
2017-07-06 10:56
#!/usr/bin/perl
use strict;
use warnings;
my $del = 0;
while(<>){
$del = 1 if(/\Acreate\s+table/);
if($del){
$del = 0 if(/;/);
next;
}
print;
}
复制代码
perl abc.pl urFile
作者:
XQKA
时间:
2017-07-06 23:30
sunzhiguolu 发表于 2017-07-06 10:56
perl abc.pl urFile
谢谢,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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2