免费注册 查看新帖 |

Chinaunix

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

perl写入以及读取文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-06 15:21 |只看该作者 |倒序浏览
本帖最后由 liuqiong023 于 2012-11-06 15:45 编辑

各位大侠,我不懂perl语言。想大家帮忙写个小程序

我需要写入文件,每一行都写入IP地址,用户名和密码,比如写入的文件内容如下:
192.168.1.1  root  123456
192.168.1.2  admin 123456


然后再从这个文件读取每一行,并解析出每一行的对应的正确的ip地址, 用户名,和密码

有没有哪位敲敲键盘,提供我一个简单的例子,感谢感谢

写入的格式其实的都无所谓:
192.168.1.1,  root , 123456
192.168.1.2,  admin, 123456

或者
ip=192.168.1.1,  username=root,  password=123456

格式都可以

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2012-11-06 15:43 |只看该作者
既然楼主不懂perl,只是要个小程序
我想这样就可以吧
readip.sh  文件名

  1. #!/usr/bin/sh
  2. while read   ip user passwd
  3. do
  4.         echo $ip $user $passwd
  5. done < $1
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-11-06 15:44 |只看该作者
写入的格式其实的都无所谓:
192.168.1.1,  root , 123456
192.168.1.2,  admin, 123456

或者
ip=192.168.1.1,  username=root,  password=123456

格式都可以

论坛徽章:
0
4 [报告]
发表于 2012-11-06 15:47 |只看该作者
楼上,,帮帮忙撒。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2012-11-06 15:53 |只看该作者

  1. #!/usr/bin/perl
  2. if(!open (CFG,<$ARGV[0]))
  3. {
  4. #
  5. }
  6. else
  7. {
  8.         while(<CFG>)
  9.         {
  10.                 my @ip=split /\s+/;
  11.                 print @ip;
  12.         }       
  13. }
复制代码

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-01 06:20:00
6 [报告]
发表于 2012-11-06 15:54 |只看该作者
@liuqiong023 把需求说清楚,相信C粉们还是很愿意帮助你。:wink:

论坛徽章:
0
7 [报告]
发表于 2012-11-06 16:10 |只看该作者
我需要的是两段代码哦。

先说下写文件的代码:
这个是我摘取的一段代码,但是这段代码,是分别写入三个文档,分别写入host.log,user.log和passwd.log,而且后面再写会覆盖前面的
我想要的是将host, username, password 写到一个文档中, 并写到一行。
然后后面再写,不会覆盖前面的
my $log_output_host = "host.log";
my $log_output_username = "user.log";
my $log_output_password = "passwd.log";
if ($level eq "config") {
              print "Enter your host ip:\n";
              $inputip = <STDIN>;           
              chomp($inputip);
              open(FILE,">$log_output_host");
              syswrite(FILE,$inputusername);
              close(FILE);

              print "Enter your host username:\n";
              $inputusername = <STDIN>;           
              chomp($inputusername);
              open(FILE,">$log_output_username");
              syswrite(FILE,$inputusername);
              close(FILE);
              
              system "stty -echo";
              print "Enter your host password:\n";
              $inputpasswd = <STDIN>;
              chomp($inputpasswd);
              $encryppasswd = encode_base64($inputpasswd);
              system "stty echo";
              open(FILE,">$log_output_password");
              syswrite(FILE,$encryppasswd);
              close(FILE);
              exit;
                        
}

论坛徽章:
0
8 [报告]
发表于 2012-11-06 16:16 |只看该作者
读取的代码,应该是另外一段。
我要从刚才写好的文档中, 分别读取每一行的对应的ip, 用户名和密码

比如下面这段代码,是读取每行的ip(这个例子是每行只有一个ip,没有用户名和密码)
我想知道,如果这一行,包含了主机名和密码,如何可以分别获取到对应的ip, 主机名,和密码呢
      my ($hostlist) =  @_;
        my $HANDLE;
        open (HANDLE, $hostlist) or die("ERROR: Can not locate \"$hostlist\" input file!\n";
        my @lines = <HANDLE>;
        my @errorArray;
        my $line_no = 0;

        close(HANDLE);
        foreach my $line (@lines) {
                $line_no++;
                &TrimSpaces($line);

                if($line) {
                        if($line =~ /^\s*:\s*$/){
                                print "Error in Parsing File at line: $line_no\n";
                                print "Continuing to the next line\n";
                                next;
                        }
                        my $host = $line;
                        &TrimSpaces($host);
                        push @hostlist,$host;
                }
        }
然后分别获取每一行的对应的ip, hostname,

论坛徽章:
0
9 [报告]
发表于 2012-11-06 17:28 |只看该作者
楼主你提问的能力真的很强大。
这是写文件的代码:
  1. my $log_output = "config.log";
  2. unlink $log_output;

  3. open(FILE,">$log_output");
  4. while (1) {
  5.               print "Enter your host ip:\n";
  6.               $inputip = <STDIN>;           
  7.               chomp($inputip);
  8.               exit if($inputip=~/\bexit\b/);
  9.               print(FILE "$inputip\t\t");

  10.               print "Enter your host username:\n";
  11.               $inputusername = <STDIN>;           
  12.               chomp($inputusername);
  13.               exit if($inputusername=~/\bexit\b/);
  14.               print(FILE "$inputusername\t\t");
  15.               
  16.               system "stty -echo";
  17.               print "Enter your host password:\n";
  18.               $inputpasswd = <STDIN>;
  19.               chomp($inputpasswd);
  20.               exit if($inputpasswd=~/\bexit\b/);
  21.               $encryppasswd = encode_base64($inputpasswd);
  22.               system "stty echo";
  23.               print(FILE $encryppasswd);
  24. }
  25. close(FILE);
复制代码
这是读文件的代码:
  1. my ($hostlist) =  @ARGV;
  2.   my $HANDLE;
  3.   print $hostlist;
  4.   open (HANDLE, $hostlist) or die("ERROR: Can not locate \"$hostlist\" input file!\n");
  5.   my @lines = <HANDLE>;
  6.   my @errorArray;
  7.   my $line_no = 0;

  8.   close(HANDLE);
  9.   foreach my $line (@lines) {
  10.           $line_no++;
  11.           &TrimSpaces($line);

  12.           if($line) {
  13.                   if($line =~ /^\s*:\s*$/){
  14.                           print "Error in Parsing File at line: $line_no\n";
  15.                           print "Continuing to the next line\n";
  16.                           next;
  17.                   }
  18.                   (my $host, my $user, my $passwd) = split($line);
  19.                   &TrimSpaces($host);
  20.                   push @hostlist,$host;
  21.                   push @userlist,$host;
  22.                   push @passwdlist,$host;
  23.           }
  24.   }
复制代码

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
10 [报告]
发表于 2012-11-06 17:32 |只看该作者
LZ  你是要做ssh登陆吗:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP