Chinaunix

标题: ultraedit中用perl 脚本实现如下替换,在线等 [打印本页]

作者: emlin129    时间: 2015-12-17 20:12
标题: ultraedit中用perl 脚本实现如下替换,在线等
本帖最后由 zhlong8 于 2015-12-18 22:06 编辑

如何将
address [a-z A-Z 和-]212.224.254.0 mask 24  
替换成

address 212.224.254.0 mask 24  

比如有这些行
address be_mobistar-212.224.254.0 mask 24  
address be_base-217.72.232.0 mask 24  


[a-z A-Z 和-] 中的字符长度不限,大小写不限 级带- 字符



作者: emlin129    时间: 2015-12-17 21:03
没人搞定吗?
作者: 浅浅的墨伤    时间: 2015-12-17 23:23
其实我连需求都没太看懂……
作者: yakczh_cu    时间: 2015-12-18 09:48
  1. use 5.01;


  2. while(<DATA>){
  3.    
  4.    
  5.    s/\s.*-/ /;
  6.    
  7.     say $_;
  8.    
  9. }

  10. __DATA__

  11. address be_mobistar-212.224.254.0 mask 24  
  12. address be_base-217.72.232.0 mask 24  
复制代码

作者: zhlong8    时间: 2015-12-18 10:29
你这可比 4,5,2,5,5,9,? 下一个数字是多少要难多了
作者: emlin129    时间: 2015-12-18 13:04
做一个替换,人工替换效率太低,就像看看perl能否搞定,看了半天的perl的正则表达式还没有搞定

@yakczh_cu  没看懂你写的,是不是要把文本读取了,然后通过perl执行你写的regex吗?

多谢各位的解答!
作者: yakczh_cu    时间: 2015-12-18 20:43
回复 6# emlin129

按你理解的方式

  1. perl -n -e  "s/\s.*-/ /;print " your_input.txt
复制代码

作者: zhlong8    时间: 2015-12-18 22:12
楼主断下句啊,稍微给你编辑了一下。花了24个小时才明白你不是想把一行变三行
作者: sunzhiguolu    时间: 2015-12-18 22:46
楼主表达的意思比较深奥啊, 没看懂...
作者: stanley_tam    时间: 2015-12-21 12:06
来一发,貌似就是一正则表达
用法:perl sample.pl  your_text.txt
  1. #!perl
  2. use strict;
  3. use warnings;

  4. $^I = '.bak';

  5. while (<>) {
  6.     $_ =~ s{(?<=address\s) [\w]+ -}{}x;
  7.     print;
  8. }

  9. __END__
复制代码

作者: emlin129    时间: 2015-12-26 23:57
已经搞定,4楼和7楼正解,这不过刚开始看不懂,其实这个问题就是正则表达式怎么写的问题,一开始未问到核心。现在还只能先用ultraedit中的替换,perl的完整的运行还是不太会。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2