Chinaunix

标题: 查找最后一个关键字以下几行。 [打印本页]

作者: cbnuisve    时间: 2015-12-28 17:56
标题: 查找最后一个关键字以下几行。
请问下怎么去查找关键字出现的最后一次出现以下几行内容(包括关键字的内容),如果用sed , awk,grep等要怎样实现呢?

作者: ly5066113    时间: 2015-12-29 09:03
回复 1# cbnuisve


seq 25 | sed -n '1{N;N};N;/^1/h;${g;p};D'
作者: cbnuisve    时间: 2015-12-29 10:33
本帖最后由 cbnuisve 于 2015-12-29 13:36 编辑

回复 2# ly5066113

不是很明白,能否讲的明白些?

假如我有一个文件内容如下:
192.168.0.1  asdfasd sadfsd         
192.168.0.3 fdsgsiorlsf1032fdg
192.168.0.4 dfgsdfgkoor5855
192.168.0.1 fgiu8945rt3wwe
192.168.0.9  98q3409r5qwer
192.168.0.1 asdfsad51
192.168.0.5 a89e9r89
192.168.0.6 asdfgasoiert
192.168.0.100 asdf9wre
192.168.0.101 9q43258qklmtrkqwer

我用192.168.0.1为关键字查询,我想要得到的结果是:
192.168.0.1 asdfsad51
192.168.0.5 a89e9r89
192.168.0.6 asdfgasoiert
192.168.0.100 asdf9wre

   
作者: haooooaaa    时间: 2015-12-29 10:55
  1. awk '$1~/192.168.0.1$/{a=$0;next}{a=a"\n"$0}END{print a}' file
  2. 192.168.0.1 asdfsad51
  3. 192.168.0.5 a89e9r89
  4. 192.168.0.6 asdfgasoiert
  5. 192.168.0.100 asdf9wre
  6. 192.168.0.101 9q43258qklmtrkqwer
复制代码

作者: cbnuisve    时间: 2015-12-29 13:36
本帖最后由 cbnuisve 于 2015-12-29 13:37 编辑

回复 4# haooooaaa

经测试会从第一行读取数据,达不到我想要的结果。

   
作者: ljwd1000    时间: 2015-12-29 14:01
  1. awk '$1~/192.168.0.1$/{a=$0;s=0;next}{if(s++<3)a=a"\n"$0}END{print a}'
复制代码
回复 5# cbnuisve


   
作者: ly5066113    时间: 2015-12-29 15:11
回复 3# cbnuisve
  1. sed -n '1{N;N};N;/192.168.0.1\b/h;${g;p};D' file
复制代码

作者: cbnuisve    时间: 2015-12-29 17:12
回复 7# ly5066113

谢谢,测试了一下,可以使用/。

   
作者: cbnuisve    时间: 2015-12-29 17:14
回复 6# ljwd1000


   经测试,还是从前面读取数据。
作者: ljwd1000    时间: 2015-12-29 17:54
回复 9# cbnuisve
  1. $ awk '$1~/192.168.0.1$/{a=$0;s=0;next}{if(s++<3)a=a"\n"$0}END{print a}' 1
  2. 192.168.0.1 asdfsad51
  3. 192.168.0.5 a89e9r89
  4. 192.168.0.6 asdfgasoiert
  5. 192.168.0.100 asdf9wre

  6. BJIT002102+Administrator@BJIT002102 ~
  7. $ cat 1
  8. 192.168.0.1  asdfasd sadfsd
  9. 192.168.0.3 fdsgsiorlsf1032fdg
  10. 192.168.0.4 dfgsdfgkoor5855
  11. 192.168.0.1 fgiu8945rt3wwe
  12. 192.168.0.9  98q3409r5qwer
  13. 192.168.0.1 asdfsad51
  14. 192.168.0.5 a89e9r89
  15. 192.168.0.6 asdfgasoiert
  16. 192.168.0.100 asdf9wre
  17. 192.168.0.101 9q43258qklmtrkqwer
复制代码
上你测试的代码看看
作者: cbnuisve    时间: 2015-12-30 08:55
本帖最后由 cbnuisve 于 2015-12-30 08:56 编辑

回复 10# ljwd1000

谢谢。测试了一下用以下可用
  1. $ awk '$1~/192.168.0.1$/{a=$0;s=0;next}{if(s++<3)a=a"\n"$0}END{print a}' 1
  2. 192.168.0.1 asdfsad51
  3. 192.168.0.5 a89e9r89
  4. 192.168.0.6 asdfgasoiert
  5. 192.168.0.100 asdf9wre

  6. BJIT002102+Administrator@BJIT002102 ~
  7. $ cat 1
  8. 192.168.0.1  asdfasd sadfsd
  9. 192.168.0.3 fdsgsiorlsf1032fdg
  10. 192.168.0.4 dfgsdfgkoor5855
  11. 192.168.0.1 fgiu8945rt3wwe
  12. 192.168.0.9  98q3409r5qwer
  13. 192.168.0.1 asdfsad51
  14. 192.168.0.5 a89e9r89
  15. 192.168.0.6 asdfgasoiert
  16. 192.168.0.100 asdf9wre
  17. 192.168.0.101 9q43258qklmtrkqwer
复制代码
但是在我正常的环境下还是有问题,我是用tshark 抓包然后读取但还是从第一行开始读取。  tshark -r ip.txt -x -V |grep -E "192.168.0.1|Time"| awk '$1~/192.168.0.1$/{a=$0;s=0;next}{if(s++<3)a=a"\n"$0}END{print a}'  

我的示例跟真实的可能有点差别。
  1. Source: 192.168.0.1(192.168.0.1)
  2.     Arrival Time: Dec 28, 2015 09:40:07.716923991 CST
  3.     [Time shift for this packet: 0.000000000 seconds]
  4.     Epoch Time: 1451266807.716923991 seconds
  5.     [Time delta from previous captured frame: 0.000266969 seconds]
  6.     [Time delta from previous displayed frame: 0.000266969 seconds]
  7.     [Time since reference or first frame: 59821.781043467 seconds]
  8.     Time to live: 126
  9.     Arrival Time: Dec 28, 2015 09:40:07.749227252 CST
  10.    。。。。。。
复制代码





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