免费注册 查看新帖 |

Chinaunix

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

位置不定,顺序不定的,字符串提取,在线! [复制链接]

论坛徽章:
0
41 [报告]
发表于 2009-06-06 00:56 |只看该作者
file1:
DIP="192.168.3.1"
PROTOCOL="tcp"
DPORT="80"
SPORT=...
SIP=......
这个文件里定义的变量个数不只这几个
fiel2:
iptables -A INPUT -p tcp --dport 80 -d 192.168.3.1 -j DROP
iptables -A OUTPUT -p udp --dport 80 -d 192.168.3.1 -j DROP
iptables -A INPUT -d 192.168.3.1 -j DROP
iptables -I FORWARD -p tcp -d 192.168.3.1 -j DROP
iptables -I OUTPUT -d 192.168.3.1 -j DROP
现在 打印只有$DIP的行 :
iptables -A INPUT -d 192.168.3.1 -j DROP
iptables -I OUTPUT -d 192.168.3.1 -j DROP
不能根据这个的行号打印,排列不一定在那行
打印的时候请用变量$DIP代替192.168.3.1.
-------------------------------------------
如果要求只是要打印file2中含变量$DIP的那行,并且变量$DIP的值只由文件file1获得的话:
  1 #!/bin/bash
  2 DIP=`cat file1 | awk 'BEGIN{
  3 FS="\""
  4 }  
  5 /DIP/ {
  6 print $2
  7 }'`
  8 echo -e "Search DIP=$DIP\nResult:"
  9 cat file2 | egrep -ni "$DIP"
10 exit 0

论坛徽章:
0
42 [报告]
发表于 2009-06-06 08:42 |只看该作者

回复 #35 kwokcn 的帖子

狼大哥解释一下这个awk阿 。。。

论坛徽章:
0
43 [报告]
发表于 2009-06-06 10:15 |只看该作者

  1. test.pl
  2. -----------
  3. #!/usr/bin/perl

  4. my(%A,%B);

  5. my $F1=shift @ARGV;
  6. my $F2=shift @ARGV;
  7. for (@ARGV){$B{$_}=1;}

  8. open(F, "<$F1");
  9. while(<F>)
  10. {
  11.     /(\S+)="(\S+)"/;
  12.     $A{$2}=$1;
  13. }
  14. close(F);
  15. open(F,"<$F2");
  16. OUT:while(<F>)
  17. {
  18.     chomp;
  19.     split;
  20.     next if scalar @_ != scalar @ARGV *2 + 5;
  21.     while(my($key,$value)=each(%A)){s/\b$key\b/\$$value/;next OUT if ($& eq "" && exists $B{$value}) || ($& ne "" && not exists($B{$value}));}
  22.     print $_,"\n";
  23. }
  24. close(F);
复制代码

使用方法

  1. ./test.pl 文件1 文件2 参数列表
  2. 比如:
  3. cat file1
  4. DIP="192.168.3.1"
  5. PROTOCOL="tcp"
  6. DPORT="80"

  7. cat file2
  8. cat file2
  9. iptables -A INPUT -p tcp --dport 80 -d 192.168.3.1 -j DROP
  10. iptables -A OUTPUT -p udp --dport 80 -d 192.168.3.1 -j DROP
  11. iptables -A INPUT -d 192.168.3.1 -j DROP
  12. iptables -I FORWARD -p tcp -d 192.168.3.1 -j DROP
  13. iptables -I OUTPUT -d 192.168.3.1 -j DROP

  14. ./test.pl file1 file2 DIP
  15. iptables -A INPUT -d $DIP -j DROP
  16. iptables -I OUTPUT -d $DIP -j DROP

  17. ./test.pl file1 file2 DIP PROTOCOL
  18. iptables -I FORWARD -p $PROTOCOL -d $DIP -j DROP

  19. ./test.pl file1 file2 DIP PROTOCOL DPORT
  20. iptables -A INPUT -p $PROTOCOL --dport $DPORT -d $DIP -j DROP

复制代码

论坛徽章:
0
44 [报告]
发表于 2009-06-06 11:00 |只看该作者

回复 #42 lucash 的帖子

37楼解释了啊……

其实就是通过file1组装这样一个字符串:awk '!/ (非$DIP的变量值) /' file2
然后传递给bash作为命令执行。

上面这个awk里面的内容表示在匹配到"空格 非$DIP的变量值 空格"时,不予显示。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
45 [报告]
发表于 2009-06-06 11:57 |只看该作者
练习:

  1. $ awk -F = 'NR==FNR{gsub(/"/,"",$2);a[$1]=$2;next}{for(i in a) if( i != "DIP" && index($0,a[i])) next} index($0,a["DIP"]){gsub(a["DIP"],"$DIP");print}'  file1 file2
复制代码

论坛徽章:
0
46 [报告]
发表于 2009-06-06 14:12 |只看该作者

回复 #44 kwokcn 的帖子

我的意思是说,那几个斜杆加上数字是什么意思

论坛徽章:
0
47 [报告]
发表于 2009-06-06 16:21 |只看该作者

回复 #46 lucash 的帖子

ascii码的八进制表示方式,\047是单引号,\041是感叹号。

论坛徽章:
0
48 [报告]
发表于 2009-06-07 20:31 |只看该作者
这是哪种情况?

论坛徽章:
0
49 [报告]
发表于 2009-06-09 17:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP