怎样删除不想要的记录或选择想要的记录(文本文件中)

怎样删除不想要的记录或选择想要的记录(文本文件中)

如下:txt文件中我只列出了三个record, ,一个record分两个field,一个是TI, 一个是TX,    我想删除*FIELD* TI中第一符号是*的recod(或者选择第一个符号是*的记录),不知道正则表达式怎么写, *FIELD* TI中第一个字符后面总跟6位的数字,谢谢大家有益提示

*RECORD*
*FIELD* TI
+100050 AARSKOG
*FIELD* TX
....shawl scrotum as a main criterion.... ....

*RECORD*
*FIELD* TI
*100070 AORTIC AN
*FIELD* TX
......................main criterion.........................

*RECORD*
*FIELD* TI
#100070 AORTIC
*FIELD* TX
.................abdc.........................................
perl -i.bak -ne '$/="";print unless /TI\n\*\d{6}/' txt
perl -i.bak -ne '$/="";print unless /TI\n\*\d{6}/' txt [/quote]



linux下运行
[root@roothost ~]# perl -i.bak -ne '$/="";print unless /TI\n\*\d{6}/'data.txt
Bareword found where operator expected at -e line 1, near "/TI\n\*\d{6}/data"
        (Missing operator before data?)
syntax error at -e line 1, near "/TI\n\*\d{6}/data"
Execution of -e aborted due to compilation errors.


???

[[i] 本帖最后由 drosophilia 于 2008-6-2 11:37 编辑 [/i]]
data 前面要有个空格
加了空格运行, 结果data.txt 跟备份文件一样,没有变化,不知道???
open FILE1,"<1.txt";
open FILE2,">>2.txt";
$flag=1;
while(<FILE>)
{
if(/TI/)
  { $flag=0;
    next;
  }
if(TX/)
  {
print FILE2 $_;
   $flag=1;
   next;
  }
if($flag==1)
{
print FILE2 $_;
next;
}
}
我还是想用2楼的方法来处理我的文本,没有考虑6楼的,不好意思哦,感觉前者要简练些,但还是有点问题,我重新编辑了一下我的文本,我选了3个记录作为data.txt文件
文件如下:
*RECORD*
*FIELD* TI
+100050 AARSKOG
*FIELD* TX
....shawl scrotum as a main criterion.... ....
*RECORD*
*FIELD* TI
*100070 AORTIC AN
*FIELD* TX
main criterion
*RECORD*
*FIELD* TI
#100070 AORTIC
*FIELD* TX
abdc
*THEEND*

我重新选取了输入分隔符即$/="*RECORD*\n";   它不应该是空行,我开始编辑的时候犯了一个小错误,也就是record之间不是用空行分隔的,上面我改过以后的文件
这样我写了一个小程序
#!/usr/local/bin/perl
open(FILE, "data.txt");
$/="*RECORD*\n";

while(<FILE>){
print "\$_=$_";
}


但遇到一个问题不好解决,就是上面的程序输出的记录是 *RECORD*加上\n
而我希望输出的记录即$_中, *RECORD*和\n 要打头,例如$_=
*RECORD*
*FIELD* TI
*100070 AORTIC AN
*FIELD* TX
main criterion
大家帮我看看怎么选择输入分隔符,我想分隔符中肯定没有*RECORD*,因为输入的每一个记录需要以分隔符结尾,这违背了我的初衷!我试着改动输出分隔符$\, 和每一次改变输出的$_记录,都不太可行,大家帮我看看把