免费注册 查看新帖 |

Chinaunix

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

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

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

回复 8# love_shift


root@ubuntu:~/cu_test# more ex2
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 = "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 = "1234508AC861E9843";
obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";
就是把0x0000005那一行的"08:AC:86:1E:98:43"去掉冒号成08AC861E9843再到前面加5个不变的数字, 可以是12345,也可以是88888

论坛徽章:
771
金牛座
日期: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
12 [报告]
发表于 2014-08-27 13:53 |只看该作者
本帖最后由 Herowinter 于 2014-08-27 13:54 编辑

回复 9# xiao_244

哪里不一样,请贴出你的测试文本和有问题的地方,
另外你的原始文件只有一行0x00000005吗?

   

论坛徽章:
771
金牛座
日期: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
13 [报告]
发表于 2014-08-27 14:15 |只看该作者
本帖最后由 Herowinter 于 2014-08-27 23:23 编辑

回复 11# xiao_244
  1. sed -r '/0x00000005/h;/0x00000019/{g;s/0x00000005/0x00000019/;s/://g;s/(obj\.value = ")(.*)/\112345\2/}' 1.txt
  2. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  3. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  4. obj.id = "0x00000019" ; obj.value = "1234508AC861E9843";
  5. obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";

  6. cat 1.txt
  7. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  8. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  9. obj.id = "0x00000019" ; obj.value = "";
  10. obj.id = "0x00000020" ; obj.value = "08:AC:86:1E:98:21";
复制代码

论坛徽章:
0
14 [报告]
发表于 2014-08-27 14:24 |只看该作者
本帖最后由 love_shift 于 2014-08-27 14:24 编辑

回复 11# xiao_244


      眼神不好。。已修改!tks

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

非常谢谢~!!你还是没有注意看啊~!
obj.id = "0x00000019" ; obj.value = "12345608:AC:86:1E:98:43";
中间的冒号还是没有去掉
要成这样的:
obj.id = "0x00000019" ; obj.value = "12345608AC861E9843"

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


非常感谢,这个可以了,不过这命令没看明白~!还有这个可以直接修改文件吗~!

论坛徽章:
771
金牛座
日期: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
17 [报告]
发表于 2014-08-27 14:48 |只看该作者
本帖最后由 Herowinter 于 2014-08-27 23:23 编辑

回复 16# xiao_244

我写完后才发现和8楼一样的,直接修改原文件加-i,这样.
  1. sed -ir '/0x00000005/h;/0x00000019/{g;s/0x00000005/0x00000019/;s/://g;s/(obj\.value = ")(.*)/\112345\2/}' 1.txt
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
18 [报告]
发表于 2014-08-27 14:57 |只看该作者
回复 9# xiao_244


    哦 19 不是最后一行啊。
那就把最后一行的定位标记改为 19 这个字符串就可以了吧:
  1. [seesea@UC ~]$ cat ttt
  2. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  3. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  4. ...
  5. obj.id = "0x00000019" ; obj.value = "";
  6. .............
  7. ...............
  8. ..........
  9. [seesea@UC ~]$  sed -r '/0x00000005/{h}; /0x00000019/{G; s/://g; s/";\n.*"(.*";)/123456\1/}' ttt
  10. obj.id = "0x00000005" ; obj.value = "08:AC:86:1E:98:43";
  11. obj.id = "0x00000006" ; obj.value = "08:AC:86:1E:98:46";
  12. ...
  13. obj.id = "0x00000019" ; obj.value = "12345608AC861E9843";
  14. .............
  15. ...............
  16. ..........
复制代码

论坛徽章:
0
19 [报告]
发表于 2014-08-27 15:01 |只看该作者
回复 15# xiao_244

啊, 今天晕了。 细节决定成败啊。哈哈 。 把: 先删掉即可,参考Herowinter的
   

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


看了一天了, 这句s/(obj.value = ")(.*)/\112345\2/ 怎么都没明白是怎么工作的!
 大侠帮解释一下??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP