免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xiao_244
打印 上一主题 下一主题

[文本处理] 求助!提取文件指定文本替换到文件中指定地方[已解决] [复制链接]

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
21 [报告]
发表于 2014-08-27 23:21 |只看该作者
回复 20# xiao_244
做到这一步的时候,前面的结果是这里面的Test String.

   

论坛徽章:
1
水瓶座
日期:2014-08-30 00:42:21
22 [报告]
发表于 2014-08-28 00:54 |只看该作者
回复 21# Herowinter

非常感谢!终于明白了?

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
23 [报告]
发表于 2014-08-28 21:27 |只看该作者
本帖最后由 reb00t 于 2014-08-28 21:37 编辑

蹩脚php来了。。
  1. <?php




  2. $f = fopen ("200.txt", "r");
  3.     while ($line= fgets ($f)) {

  4.        if(preg_match('/0x00000005/', $line)){
  5.            $mac=explode("\"", $line);
  6.            $pa1='/:/';
  7.            $newmac=preg_replace($pa1, "",  $mac[3]);
  8.            $newmac="12345".$newmac;
  9.            print $line;

  10.      }elseif (preg_match('/0x00000019/', $line)) {
  11.            $pa2='/\"\"/';
  12.            print preg_replace($pa2, "\"$newmac\"", $line);

  13.      }else{

  14.         print $line;
  15.      }
  16.    
  17.    
  18. }
  19.     fclose ($f);
  20. ?>








  21. 结果:
  22. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  23. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  24. obj.id = "0x00000019" ; obj.value = "1234508AC861E9843";
  25. obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";




  26. [Finished in 1.9s]


  27. 操作文本:

  28. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  29. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  30. obj.id = "0x00000019" ; obj.value = "";
  31. obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";
复制代码

论坛徽章:
1
水瓶座
日期:2014-08-30 00:42:21
24 [报告]
发表于 2014-08-30 01:01 |只看该作者
回复 21# Herowinter

请再帮我分析下:

obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
中间还有一些行
obj.id = "0x00000019" ; obj.value = "";
obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";
obj.id = "0x00000021" ; obj.value = "hore"
读取MAC地址的前8位都替换成需要的22:33:44变成:
obj.id = "0x00000005" ; obj.value = "22:33:44:1E:98:43";
obj.id = "0x00000006" ; obj.value = "22:33:44:1E:98:46";
……
obj.id = "0x00000019" ; obj.value = "";
obj.id = "0x00000020" ; obj.value = "22:33:44:1E:98:21";
obj.id = "0x00000021" ; obj.value = "hore"
 
这个要怎么写?????谢谢!! 

我现在的办法是出一个新的MAC地址我就把前8位写成
sed -i s/08:AC:86/22:33:44/g mac.txt
sed -i s/48:A0:65/22:33:44/g mac.txt
一段时间之后MAC就变,现在都写二十来条了!!

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
25 [报告]
发表于 2014-08-30 08:06 |只看该作者
本帖最后由 Herowinter 于 2014-08-30 08:08 编辑

回复 24# xiao_244
  1. sed -ir 's/([0-9A-Fa-f]{2}:){3}/22:33:44:/' mac.txt
复制代码

论坛徽章:
1
水瓶座
日期:2014-08-30 00:42:21
26 [报告]
发表于 2014-08-31 00:32 |只看该作者
本帖最后由 xiao_244 于 2014-08-31 00:50 编辑

回复 25# Herowinter
WAP(Dopra Linux) # cat mac.txt
obj.id = "0x00000008" ; obj.value = "21500820033GE3009304";
obj.id = "0x00000009" ; obj.value = "";
obj.id = "0x0000000a" ; obj.value = "D8:49:0B:3D:74:2D";
obj.id = "0x0000000b" ; obj.value = "E0:26:31:00:70:85";
obj.id = "0x00000022" ; obj.value = "";
obj.id = "0x00000023" ; obj.value = "";
obj.id = "0x00000024" ; obj.value = "";
obj.id = "0x0000000c" ; obj.value = "D8:49:0B:3D:74:2E";
obj.id = "0x0000000d" ; obj.value = "D8:49:0B:3D:74:2F";
obj.id = "0x0000000e" ; obj.value = "D8:49:0B:3D:74:30";

WAP(Dopra Linux) # sed -r 's/([0-9A-Fa-f]{2}:){3}/22:33:44:/' mac.txt

obj.id = "0x00000008" ; obj.value = "21500820033GE3009304";
obj.id = "0x00000009" ; obj.value = "";
obj.id = "0x0000000a" ; obj.value = "22:33:44:3D:74:2D";
obj.id = "0x0000000b" ; obj.value = "22:33:44:00:70:85";
obj.id = "0x00000022" ; obj.value = "";
obj.id = "0x00000023" ; obj.value = "";
obj.id = "0x00000024" ; obj.value = "";
obj.id = "0x0000000c" ; obj.value = "22:33:44:3D:74:2E";
obj.id = "0x0000000d" ; obj.value = "22:33:44:3D:74:2F";
obj.id = "0x0000000e" ; obj.value = "22:33:44:3D:74:30";

我没说清楚!!!其实是把所有MAC前8位和0x0000000a那行的前8位相同的,都替换成22:33:44

我现在自己写成:sed -ir '/0x0000000b/!s/"..:..:../"22:33:44/' mac.txt
WAP(Dopra Linux) # sed -r '/0x0000000b/!s/"..:..:../"22:33:44/' mac.txt

obj.id = "0x00000008" ; obj.value = "21500820033GE3009304";
obj.id = "0x00000009" ; obj.value = "";
obj.id = "0x0000000a" ; obj.value = "22:33:44:3D:74:2D";
obj.id = "0x0000000b" ; obj.value = "E0:26:31:00:70:85";
obj.id = "0x00000022" ; obj.value = "";
obj.id = "0x00000023" ; obj.value = "";
obj.id = "0x00000024" ; obj.value = "";
obj.id = "0x0000000c" ; obj.value = "22:33:44:3D:74:2E";
obj.id = "0x0000000d" ; obj.value = "22:33:44:3D:74:2F";
obj.id = "0x0000000e" ; obj.value = "22:33:44:3D:74:30";
现在基本还可以用, 可是如果以后文件里出现两个以上前8位不同的就用不了了~!

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
27 [报告]
发表于 2014-08-31 02:20 |只看该作者
回复 26# xiao_244

没环境,手写的,有错莫怪,我自己也不是非常有信心。
  1. m=`sed -r '0,/0x0000000a/{//s/.*= "(([0-9A-Fa-f]{2}:){3}).*/\1/}' mac.txt`; sed -i "s/$m/22:33:44:/" mac.txt
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
28 [报告]
发表于 2014-09-01 09:34 |只看该作者
本帖最后由 Herowinter 于 2014-09-01 09:35 编辑

回复 26# xiao_244

楼上的忘了加-n了,有点问题,我刚测了下,改成这样应该就可以了.
  1. m=`sed -nr '0,/0x0000000a/{//s/.*= "(([0-9A-Fa-f]{2}:){3}).*/\1/p}' mac.txt`; sed "s/$m/22:33:44:/" mac.txt
  2. obj.id = "0x00000008" ; obj.value = "21500820033GE3009304";
  3. obj.id = "0x00000009" ; obj.value = "";
  4. obj.id = "0x0000000a" ; obj.value = "22:33:44:3D:74:2D";
  5. obj.id = "0x0000000b" ; obj.value = "E0:26:31:00:70:85";
  6. obj.id = "0x00000022" ; obj.value = "";
  7. obj.id = "0x00000023" ; obj.value = "";
  8. obj.id = "0x00000024" ; obj.value = "";
  9. obj.id = "0x0000000c" ; obj.value = "22:33:44:3D:74:2E";
  10. obj.id = "0x0000000d" ; obj.value = "22:33:44:3D:74:2F";
  11. obj.id = "0x0000000e" ; obj.value = "22:33:44:3D:74:30";
复制代码
直接修改mac.txt加-i
  1. m=`sed -nr '0,/0x0000000a/{//s/.*= "(([0-9A-Fa-f]{2}:){3}).*/\1/p}' mac.txt`; sed -i "s/$m/22:33:44:/" mac.txt
复制代码

论坛徽章:
1
双鱼座
日期:2014-08-25 19:13:11
29 [报告]
发表于 2014-09-01 10:31 |只看该作者
下面截图里的工具是神马?求出处

回复 21# Herowinter


   

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
30 [报告]
发表于 2014-09-01 10:55 |只看该作者
回复 29# fxpbupt

http://bbs.chinaunix.net/thread-4120164-1-1.html

个人觉得regex101比较好用.
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP