Chinaunix

标题: 求助字符串的处理问题:如何读入一个文本文件,并查找相应字符串,赋值给变量? [打印本页]

作者: wangmice    时间: 2014-09-18 18:30
标题: 求助字符串的处理问题:如何读入一个文本文件,并查找相应字符串,赋值给变量?
本帖最后由 wangmice 于 2014-09-18 18:34 编辑

比如我有一个html文件:
内容如下
  1. <html>
  2. <head>
  3.         <title>ChinaNet</title>
  4.         <meta http-equiv="Content-Type" Content="text/html; Charset=gb2312">
  5.         <meta http-equiv="Content-Language" Content="zh-CN">
  6. </head>
  7. <script type="text/javascript">
  8.         if (window != top) top.location =window.location;
  9.         window.moveTo(0,0);
  10.         window.resizeTo(screen.width,screen.height-30);
  11. </script>
  12. <frameset rows="0,*" frameborder="no" cols="*" border="0" framespacing="0" >
  13. <frame name="hiddenFrame" scrolling="NO" frameborder="0" noresize src="blank.html" >
  14. <frame name="mainFrame" src="/style/portalv4/index.jsp?paramStr=9M%2B7JzF%2B8VM0J3SkAiy4%2FMr8PSX%2BPFogahDPxZk0GKDHvs2EZ2b1q9QM3a8ZRnsMyPaPKAK90j4e%0AyGC75CGfU5Ts0%2BeIZ2naavnnm8dPOV1e3JUA1SRs8UNu%2Bhvd29qFJ2JXb3cA4sdiDa6yG9BQOuKF%0AcOxo57uQALJEOvsCeYNTEXeN%2BXbnDwSW9vmGFG3PQgINttFEn%2Bg9oXdjJ67vr%2BNbQGTujmNEB2QW%0AlVvX07UBUhj2pzqZSniOC2b3q%2BnxdbBy%2BPLk96Wv6my6gR1OhPlcjHlOy1pV33oC6TIKunRxRQZ%2F%0ATdyRlN6WhOVT%2FY2yHkM1bkh0gR6qP8DPQIoV2IYF1WSEQie493UqEKlaR9avMvoDeu9m%2FSSw1hnK%0ATGImTM5NMUfIm1ntjjY3OKeoOw%3D%3D" noresize scrolling="auto">
  15. </frameset>
  16. </html>
复制代码
我要的是截取字符串mainframe的src的内容
/style/portalv4/index.jsp?paramStr=9M%2B7JzF%2B8VM0J3SkAiy4%2FMr8PSX%2BPFogahDPxZk0GKDHvs2EZ2b1q9QM3a8ZRnsMyPaPKAK90j4e%0AyGC75CGfU5Ts0%2BeIZ2naavnnm8dPOV1e3JUA1SRs8UNu%2Bhvd29qFJ2JXb3cA4sdiDa6yG9BQOuKF%0AcOxo57uQALJEOvsCeYNTEXeN%2BXbnDwSW9vmGFG3PQgINttFEn%2Bg9oXdjJ67vr%2BNbQGTujmNEB2QW%0AlVvX07UBUhj2pzqZSniOC2b3q%2BnxdbBy%2BPLk96Wv6my6gR1OhPlcjHlOy1pV33oC6TIKunRxRQZ%2F%0ATdyRlN6WhOVT%2FY2yHkM1bkh0gR6qP8DPQIoV2IYF1WSEQie493UqEKlaR9avMvoDeu9m%2FSSw1hnK%0ATGImTM5NMUfIm1ntjjY3OKeoOw%3D%3D

但是要找的内容/style/portalv4/index.jsp?paramStr=后面的内容却不是固定的。怎么单独提取出来啊?

新手在这里谢过了。
作者: zxy877298415    时间: 2014-09-18 18:55
回复 1# wangmice
awk -F '[= ]+' -v RS=">" '/"mainFrame" src="/{print $6}' FILE
9M%2B7JzF%2B8VM0J3SkAiy4%2FMr8PSX%2BPFogahDPxZk0GKDHvs2EZ2b1q9QM3a8ZRnsMyPaPKAK90j4e%0AyGC75CGfU5Ts0%2BeIZ2naavnnm8dPOV1e3JUA1SRs8UNu%2Bhvd29qFJ2JXb3cA4sdiDa6yG9BQOuKF%0AcOxo57uQALJEOvsCeYNTEXeN%2BXbnDwSW9vmGFG3PQgINttFEn%2Bg9oXdjJ67vr%2BNbQGTujmNEB2QW%0AlVvX07UBUhj2pzqZSniOC2b3q%2BnxdbBy%2BPLk96Wv6my6gR1OhPlcjHlOy1pV33oC6TIKunRxRQZ%2F%0ATdyRlN6WhOVT%2FY2yHkM1bkh0gR6qP8DPQIoV2IYF1WSEQie493UqEKlaR9avMvoDeu9m%2FSSw1hnK%0ATGImTM5NMUfIm1ntjjY3OKeoOw%3D%3D"

   
作者: wangmice    时间: 2014-09-18 19:07
回复 2# zxy877298415


    谢谢,好像可以,但是最后多了个双引号?
作者: yinyuemi    时间: 2014-09-18 19:12
awk '/<frame name="mainFrame" src="/{print a[match($0,/<frame name="mainFrame" src="\/([^"]*)".*/,a)]}' file
没测试
作者: wangmice    时间: 2014-09-18 19:14
回复 4# yinyuemi


谢谢了,完全OK,等我好好研究一下,非常感谢啊。   
作者: wangmice    时间: 2014-09-18 19:20
回复 2# zxy877298415

如何把最后多出来的双引号去掉啊?
   
作者: qq58945591    时间: 2014-09-18 19:28
sed -n 's/^.*" src="\(.*\)" no.*/\1/gp' html

/style/portalv4/index.jsp?paramStr=9M%2B7JzF%2B8VM0J3SkAiy4%2FMr8PSX%2BPFogahDPxZk0GKDHvs2EZ2b1q9QM3a8ZRnsMyPaPKAK90j4e%0AyGC75CGfU5Ts0%2BeIZ2naavnnm8dPOV1e3JUA1SRs8UNu%2Bhvd29qFJ2JXb3cA4sdiDa6yG9BQOuKF%0AcOxo57uQALJEOvsCeYNTEXeN%2BXbnDwSW9vmGFG3PQgINttFEn%2Bg9oXdjJ67vr%2BNbQGTujmNEB2QW%0AlVvX07UBUhj2pzqZSniOC2b3q%2BnxdbBy%2BPLk96Wv6my6gR1OhPlcjHlOy1pV33oC6TIKunRxRQZ%2F%0ATdyRlN6WhOVT%2FY2yHkM1bkh0gR6qP8DPQIoV2IYF1WSEQie493UqEKlaR9avMvoDeu9m%2FSSw1hnK%0ATGImTM5NMUfIm1ntjjY3OKeoOw%3D%3D
作者: reyleon    时间: 2014-09-18 19:40
  1. grep -Po '(?<=name="mainFrame" src=")[^"]+' file
复制代码

作者: wangmice    时间: 2014-09-18 19:55
回复 8# reyleon


    这个也是行的,谢谢了。能解释一下么?
作者: wangmice    时间: 2014-09-18 19:57
还有一段,稍微复杂一点的原文件是这样的:
  1. <div class="menu_bg">

  2.   <div class="menuw">

  3.      <div class="menul" id="title1" ><a href="/?paramStr=COqXYOzD8pv6cqCP2xM%2F1SCivPTIX3lV9%2B9dZmPotygIT07tav4gmkV3YaJk2R6lFELpy6M0smNc%0AMQPUW0HlQCf%2BfggbMODzdNWJXUBe7PolMOoUCaIjhqDSo2yjgW5FIJMekgOpg1eJp%2FUZobDZ80FM%0AyVEsn38hKOLWiAREQ7MF3PrF2BKOncfyOSba9CgnL4KKm%2Fdhh6gjxgAbH3%2BzG06mdicDoK4iDZ02%0AkDPwWRmhHxVkKzhh2XIaClpwQBYY6EHiLe%2B92fm8%2Fjyl9shhv%2FvCHsIVG24vu9jVoMWpuYyM5QID%0AZYnhny35P54zz1qcK8%2ByfdFq%2FE3rEN7I21KNLWR8bPkAdhdMdJkLUc5xW9BxRQZ%2FTdyRlEvmHglf%0A7grYr7OorOlDy%2F09ahxFXJkdj74IypFWhrjc3%2BxkrnV%2B%2Frs%3D" target="_top">首页</a></div>

  4.      <div class="menul" id="title2" ><a href="http://wlan.vnet.cn" target="_new">热点搜索</a></div>

  5.      <div class="menul" id="title3" ><a href="http://sh.189.cn/" target="_new">网上营业厅</a></div>

  6.      <div class="menul" id="title4" ><a href="/style/portalv4/index.jsp?paramStr=COqXYOzD8pv6cqCP2xM%2F1SCivPTIX3lV9%2B9dZmPotygIT07tav4gmkV3YaJk2R6lFELpy6M0smNc%0AMQPUW0HlQCf%2BfggbMODzdNWJXUBe7PolMOoUCaIjhqDSo2yjgW5FIJMekgOpg1eJp%2FUZobDZ80FM%0AyVEsn38hKOLWiAREQ7MF3PrF2BKOncfyOSba9CgnL4KKm%2Fdhh6gjxgAbH3%2BzG06mdicDoK4iDZ02%0AkDPwWRmhHxVkKzhh2XIaClpwQBYY6EHiLe%2B92fm8%2Fjyl9shhv%2FvCHsIVG24vu9jVoMWpuYyM5QID%0AZYnhny35P54zz1qcK8%2ByfdFq%2FE3rEN7I21KNLWR8bPkAdhdMdJkLUc5xW9BxRQZ%2FTdyRlEvmHglf%0A7grYr7OorOlDy%2F09ahxFXJkdj74IypFWhrjc3%2BxkrnV%2B%2Frs%3D&clkid=4" target="_new">常见问题</a></div>

  7.      <div class="menult" id="title5" ><a href="http://wifi.189.cn" target="_new">时长卡购买</a></div>

  8.      <div class="menur">

  9.             

  10.                         <a href="javascript:selectLanguage('en');">English</a>

  11.                

  12.      </div>

  13.   </div>

  14. </div>

  15. <div class="conb">       



  16. <script type="text/javascript">

  17.         var reqUrl="/style/portalv4/index.jsp?paramStr=COqXYOzD8pv6cqCP2xM%2F1SCivPTIX3lV9%2B9dZmPotygIT07tav4gmkV3YaJk2R6lFELpy6M0smNc%0AMQPUW0HlQCf%2BfggbMODzdNWJXUBe7PolMOoUCaIjhqDSo2yjgW5FIJMekgOpg1eJp%2FUZobDZ80FM%0AyVEsn38hKOLWiAREQ7MF3PrF2BKOncfyOSba9CgnL4KKm%2Fdhh6gjxgAbH3%2BzG06mdicDoK4iDZ02%0AkDPwWRmhHxVkKzhh2XIaClpwQBYY6EHiLe%2B92fm8%2Fjyl9shhv%2FvCHsIVG24vu9jVoMWpuYyM5QID%0AZYnhny35P54zz1qcK8%2ByfdFq%2FE3rEN7I21KNLWR8bPkAdhdMdJkLUc5xW9BxRQZ%2FTdyRlEvmHglf%0A7grYr7OorOlDy%2F09ahxFXJkdj74IypFWhrjc3%2BxkrnV%2B%2Frs%3D";

  18.         var clkid="1";

  19.         var provider = "null";

  20.         function changeCSS(clkid){

  21.                 document.getElementById("title"+clkid).className="menulo";

  22.         }

  23.         function selectLanguage(language){

  24.                 var herfurl = reqUrl+"&language="+language+"&clkid="+clkid;

  25.                 //alert(provider);

  26.                 if(provider && provider != "null")

  27.                         herfurl+="&provider="+provider;

  28.                 window.location.href=herfurl;

  29.         }
复制代码
想取到其中的验证码:
COqXYOzD8pv6cqCP2xM%2F1SCivPTIX3lV9%2B9dZmPotygIT07tav4gmkV3YaJk2R6lFELpy6M0smNc%0AMQPUW0HlQCf%2BfggbMODzdNWJXUBe7PolMOoUCaIjhqDSo2yjgW5FIJMekgOpg1eJp%2FUZobDZ80FM%0AyVEsn38hKOLWiAREQ7MF3PrF2BKOncfyOSba9CgnL4KKm%2Fdhh6gjxgAbH3%2BzG06mdicDoK4iDZ02%0AkDPwWRmhHxVkKzhh2XIaClpwQBYY6EHiLe%2B92fm8%2Fjyl9shhv%2FvCHsIVG24vu9jVoMWpuYyM5QID%0AZYnhny35P54zz1qcK8%2ByfdFq%2FE3rEN7I21KNLWR8bPkAdhdMdJkLUc5xW9BxRQZ%2FTdyRlEvmHglf%0A7grYr7OorOlDy%2F09ahxFXJkdj74IypFWhrjc3%2BxkrnV%2B%2Frs%3D

怎么取法啊?
作者: wangmice    时间: 2014-09-18 19:58
有大家帮忙就是不一样啊。自己弄了一天没弄出来
作者: zxy877298415    时间: 2014-09-18 20:00
回复 6# wangmice
awk -F '[=" ]+' -v RS=">" '/"mainFrame" src="/{print $6}' FILE


   
作者: wangmice    时间: 2014-09-18 20:03
回复 7# qq58945591


    谢谢,也是OK的
作者: reyleon    时间: 2014-09-18 20:04
回复 10# wangmice


    找你要取文本的那行的关键字,依样画葫芦呀:
  1. awk '/reqUrl.*paramStr/{print gensub(/.*paramStr=([^"]+).*/,"\\1",1)}' file
复制代码

作者: wangmice    时间: 2014-09-18 20:07
回复 14# reyleon


    谢谢了,我就是刚才没依样画出来啊。主要是正则表达式没有学好,今晚好好学习一下。
测试过了没问题。
作者: wangmice    时间: 2014-09-18 21:15
本帖最后由 wangmice 于 2014-09-18 21:34 编辑

回复 14# reyleon

你好,谢谢解答,又碰到一个问题,你这个好像我没办法赋值给变量。是什么原因?
   
作者: wangmice    时间: 2014-09-18 21:55
本帖最后由 wangmice 于 2014-09-18 22:07 编辑


请问一下,我这样赋值为什么不对呢:
parastr_data=`awk '/reqUrl.*paramStr/{print gensub(/.*paramStr=([^"]+).*/,"\\1",1)}' file`

作者: reyleon    时间: 2014-09-18 22:08
回复 17# wangmice


    还真神奇了,待我研究一下.建议用这种方式:
  1. parastr_data=$(awk '/reqUrl.*paramStr/{print gensub(/.*paramStr=([^"]+).*/,"\\1",1)}' file)
复制代码

作者: reyleon    时间: 2014-09-18 22:21
回复 17# wangmice


    突然发现, 反引号的这种形式,要用三个反斜杠,不知道为何 @blackold @yinyuemi @关阴月飞
  1. parastr_data=`awk '/reqUrl.*paramStr/{print gensub(/.*paramStr=([^"]+).*/,"\\\1",1)}' file`
复制代码
  1. parastr_data=$(awk '/reqUrl.*paramStr/{print gensub(/.*paramStr=([^"]+).*/,"\\1",1)}' file)  
复制代码

作者: wangmice    时间: 2014-09-18 22:22
回复 18# reyleon


这个没问题了,谢谢啊。前面出现的问题百思不解啊。   
作者: wangmice    时间: 2014-09-18 23:00
又学了一招,有时候问题真是出在细节处啊,一个空格就让你全盘摸不着头脑了。
作者: yinyuemi    时间: 2014-09-19 00:05
回复 19# reyleon


    、、和$()的区别,十三问
作者: reyleon    时间: 2014-09-19 00:25
回复 22# yinyuemi


    我是看了13问才问的, 貌似13问里没讲区别.
作者: yinyuemi    时间: 2014-09-19 07:19
本帖最后由 yinyuemi 于 2014-09-19 07:21 编辑

回复 23# reyleon


    http://bbs.chinaunix.net/forum.p ... d=218853&page=7
命令重组
作者: ly5066113    时间: 2014-09-19 08:39
回复 19# reyleon


看这个:

http://bbs.chinaunix.net/forum.p ... &fromuid=666268
作者: reyleon    时间: 2014-09-19 11:29
回复 25# ly5066113


      多谢 Tim 大湿, 明了
作者: zxcbvbbbbb    时间: 2015-04-29 13:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxcbvbbbbb    时间: 2015-04-29 13:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxcbvbbbbb    时间: 2015-04-29 13:52
提示: 作者被禁止或删除 内容自动屏蔽




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