免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6824 | 回复: 24
打印 上一主题 下一主题

【求助】哪位老大有空,帮小弟修改下我的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-29 16:39 |只看该作者 |倒序浏览
本帖最后由 houzi105 于 2011-06-29 16:40 编辑

我的目的是读取hosts_ip文件中的ip地址,并取值,与test_hosts文件做比较,如果在这个文件中发现取的值,就将此值在test_hosts文件中所在的行删除。

#!/usr/bin/perl -w
open(IN_HOST_IP,"hosts_ip")||die "Can not open:$!";
while (<IN_HOST_IP>;) {
        @hosts_ip_file=<IN_HOST_IP>;
        chomp();
        foreach $Host_IP (@hosts_ip_file) {
                        if ((`/usr/bin/grep $Host_IP @hosts_file`) != "") {
                                `/usr/bin/find . -type f -name test_hosts -exec vi -c "/$Host_IP/d" -c "wq" "{}" \;`
                        } else{
                                exit;
                        }
        }
}
close(IN_HOST_IP);

论坛徽章:
0
2 [报告]
发表于 2011-06-29 16:41 |只看该作者
我的目的是读取hosts_ip文件中的ip地址,并取值,与test_hosts文件做比较,如果在这个文件中发现取的值,就 ...
houzi105 发表于 2011-06-29 16:39



    既然在用perl,还犯得着使用grep和find这2个shelll命令吗?

论坛徽章:
0
3 [报告]
发表于 2011-06-29 16:44 |只看该作者
回复 2# 兰花仙子

回花仙子,我刚学perl,我不知道如何实现,只会这样用,麻烦能否指点一下。

论坛徽章:
0
4 [报告]
发表于 2011-06-29 17:43 |只看该作者
今天我闲, 什么贴都回.
按照我的思路我会这样做
1.  把hosts_ip读进来, 把每个ip值做成哈希表的key, value随便赋.
2.  读test_hosts, 每行判断读进的ip是不是哈希表的key(应该有个现成函数叫exist什么的,这样模式匹配都省掉了,看楼主的样子应该还没学模式匹配). 不是的话就写进一个新文件.
3. 最后得到的新文件就是你要的结果

没法写代码给你,因为我又菜又懒.

vi还可以这样用. 楼主牛的. 学习了.
/usr/bin/find . -type f -name test_hosts -exec vi -c "/$Host_IP/d" -c "wq" "{}" \;

论坛徽章:
0
5 [报告]
发表于 2011-06-29 17:53 |只看该作者
又仔细看了下楼主的代码,
觉得那样chomp()好像不对的吧.
另外这个判断我认为可以省掉:
if ((`/usr/bin/grep $Host_IP @hosts_file`) != "")
这样可以省掉一个shell命令.

论坛徽章:
0
6 [报告]
发表于 2011-06-29 18:12 |只看该作者
回复 5# sellie


    我是想判断一下,如果有这个记录的话,就执行,如果没有的话,就退出。现在还有一个问题,我的是aix的环境,我的命令在aix里可以执行,但是把它放在perl里就不可以执行了。郁闷,老大们,指点一下。

论坛徽章:
0
7 [报告]
发表于 2011-06-29 18:27 |只看该作者
建议你改成纯perl. 不要调shell 命令了.
正好参考这个可能对你有用. 他就是用判断哈希键值是否存在的方法.

http://bbs.chinaunix.net/thread-3558998-1-1.html

论坛徽章:
0
8 [报告]
发表于 2011-06-29 21:35 |只看该作者
笨办法
#!/usr/bin/env perl
use strict;
use warnings;


my @fn;
open (FN,"<","hosts_ip");
@fn = (<FN>);
close FN;

open (FILE,"<","test_hosts");
while(<FILE>){
        $_~~@fn?next:print;
}
close FILE;

论坛徽章:
0
9 [报告]
发表于 2011-06-30 10:10 |只看该作者
笨办法
#!/usr/bin/env perl
use strict;
use warnings;


my @fn;
open (FN,"
ludio333 发表于 2011-06-29 21:35



唉,这个笨办法我都没看懂,需要抓紧学习了。

论坛徽章:
0
10 [报告]
发表于 2011-06-30 10:10 |只看该作者
建议你改成纯perl. 不要调shell 命令了.
正好参考这个可能对你有用. 他就是用判断哈希键值是否存在的方法. ...
sellie 发表于 2011-06-29 18:27



    恩,我现在用hash方法在处理,有遇到很多新问题,困难重重呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP