Chinaunix

标题: sed 正则匹配 [打印本页]

作者: hover_sky    时间: 2011-10-11 12:18
标题: sed 正则匹配


  1. # tail -f /var/log/myout.log |sed -n '/.*301.*Moved.*Permanently/ {n;s#.*test.com/user/\(.*\)/my.jpg\(\?l=.\)#\1\2#p}'
  2. 275/8280275/2337999/jpg/5518681?l=h
  3. 865/8450865/2381058/jpg/5507828?l=a
  4. 96/2162096/1135051/jpg/5518743?l=i
  5. 827/6478827/2165863/jpg/5140518?l=j
  6. 709/2617709/846298/jpg/5518038?l=j
  7. 658/2239658/600160/jpg/5518692?l=h
  8. 766/2532766/1854003/jpg/5517944?l=h
  9. 971/8017971/2042696459/jpg/5511655?l=j
  10. 764/8094764/2301871/jpg/5486294?l=j
  11. 514/8034514/2043108668/jpg/5518074?l=g
  12. 766/2532766/1854003/jpg/5517944?l=h
  13. 891/4823891/1619388/jpg/5518061?l=j
  14. 669/4153669/1392095/jpg/5518258?l=h
  15. 471/8335471/2346266/jpg/5410620?l=d
  16. 766/2532766/1854003/jpg/5517944?l=h
  17. 766/2532766/1854003/jpg/5517944?l=h&start=3487900
  18. 669/4153669/1392095/jpg/5518258?l=h
  19. 79/8490079/2382692/jpg/5518888?l=h
  20. 669/4153669/1392095/jpg/5518258?l=h
  21. 548/8479548/2378834/jpg/5519248?l=i
  22. 669/4153669/1392095/jpg/5518258?l=h
  23. 836/8036836/2043105172/jpg/5519297?l=d
  24. 397/5578397/2384773/jpg/5518907?l=a

复制代码
请问哪里有漏洞,导致&start=3487900也被匹配到\2 ,谢谢
作者: yinyuemi    时间: 2011-10-11 12:32
回复 1# hover_sky


    sed -n '/.*301.*Moved.*Permanently/ {n;s#.*test.com/user/\(.*\)/my.jpg\(\?l=.\).*#\1\2#p}'
作者: hover_sky    时间: 2011-10-11 12:34
回复  hover_sky


    sed -n '/.*301.*Moved.*Permanently/ {n;s#.*test.com/user/\(.*\)/my.jpg\(\? ...
yinyuemi 发表于 2011-10-11 12:32



    我的目的是完全排除带有start 的匹配


  我明白了
作者: jason680    时间: 2011-10-11 13:13
回复 1# hover_sky


>>    请问哪里有漏洞,导致&start=3487900也被匹配到\2 ,谢谢

&start=3487900
它是没有被(匹配到)替换掉,还留着.......
而不是被匹配到 \2
作者: hover_sky    时间: 2011-10-11 14:35
回复  hover_sky


>>    请问哪里有漏洞,导致&start=3487900也被匹配到\2 ,谢谢

&start=3487900
...
jason680 发表于 2011-10-11 13:13



    嗯,是的。但我改成

tail -f /var/log/myout.log |sed -n '/.*301.*Moved.*Permanently/ {n;s#.*test.com/user/\(.*\)/my.jpg\(\?l=.\)$#\1\2#p}'

却没有输出
作者: hover_sky    时间: 2011-10-12 10:51
回复  hover_sky


>>    请问哪里有漏洞,导致&start=3487900也被匹配到\2 ,谢谢

&start=3487900
...
jason680 发表于 2011-10-11 13:13



   

不明白了。我要输出的是\1 和 \2 ,那为什么不是匹配\1 和 \2 的也输出 ?
作者: jason680    时间: 2011-10-12 11:05
回复 6# hover_sky

置顶文....(仔细看看...)
shell基础十二篇  / shell基础十:sed
http://bbs.chinaunix.net/thread-452942-1-1.html
作者: hover_sky    时间: 2011-10-12 11:26
回复  hover_sky

置顶文....(仔细看看...)
shell基础十二篇  / shell基础十:sed
jason680 发表于 2011-10-12 11:05



    谢谢兄台,明白了,是部分替代。



    719/7673719/2386737/jpg/5524677/my.jpg?l=d&start=442761


    我想 s的正则不处理这种语句,可有办法?谢谢
作者: hover_sky    时间: 2011-10-12 12:09
本帖最后由 hover_sky 于 2011-10-12 12:13 编辑

我想实现

HTTP/1.1 301 Moved Permanently
Location: http://test.test.com/user/91/228 ... 5523442/my.Ajpg?l=h

提取得到  91/2280091/585567/jpg/5523442|?l=h
HTTP/1.1 301 Moved Permanently
Location: http://test.test.com/user/91/228 ... ?l=h&start=2345

这种则不提取

可以这个得到:

       tail -f /var/log/myout.log|grep -v start |sed -n 's#.*test.com/user/\(.*\)/my.Ajpg\(\?l=.\)\(.*\)#\1|\2#p;'



通过关键字301.*Moved.*Permanently的下一行来提取,类似如下,还没实现。在下面语句的后面加  |grep --line-buffer  -v start 则没有输出。
        tail -f /var/log/myout.log |sed -n '/.*301.*Moved.*Permanently/ {n;s#.*test.com/user/\(.*\)/my.Ajpg\(\?l=.\)#\1\2#p}'
作者: jason680    时间: 2011-10-12 12:21
回复 9# hover_sky

直接说清楚须求....
最原始的input及最后output...这样比较快,CU牛人一堆.
作者: hover_sky    时间: 2011-10-12 12:51
本帖最后由 hover_sky 于 2011-10-12 12:53 编辑

回复 10# jason680

input: /var/log/myout.log

output: /var/log/myinf.log

实现:  从input提取数据写入output文件

从日志提取的特征:

  1. HTTP/1.1 301 Moved Permanently
  2. Location:  http://test.test.com/user/91/2280091/585567/jpg/5523442/my.Ajpg?l=h
复制代码
提取得到  91/2280091/585567/jpg/5523442|?l=h

  1. HTTP/1.1 301 Moved Permanently
  2. Location:  http://test.test.com/user/91/2280091/585567/jpg/5523442/my.Ajpg?l=h&start=2345
复制代码
这种则不提取



需要实时提取,所以要使用tail -f   /var/log/myout.log




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