免费注册 查看新帖 |

Chinaunix

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

请问在Perl中如何不使用AWK,而能够获取主机名? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 13:57 |只看该作者 |倒序浏览
bash-3.00# hostname
solaris01.jjqing.com


这是我用awk取得$1后传递给PERL的例子:
===============================================

#!/usr/bin/perl -w
$my_hostname = `hostname | awk -F"." '{print \$1}'`;
print $my_hostname;

===============================================

但是现在是在学习perl,我想完全使用perl来实现,不去使用awk,请问应该怎样做呢?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-08-15 14:05 |只看该作者
use Sys::Hostname;
    $host = hostname;

论坛徽章:
0
3 [报告]
发表于 2008-08-15 14:36 |只看该作者

回复 #1 jjqing 的帖子

#!/usr/bin/perl -w
use Sys::Hostname;
my $host=hostname;
print"$host\n";

论坛徽章:
0
4 [报告]
发表于 2008-08-15 14:38 |只看该作者
谢谢!

但是能否不使用模块,而使用perl一般的语法来实现?

因为我要取得的不仅仅HOSTNAME这一个值,有很多我觉得不能够从SYS模块中取得的,比如说IP地址,因为一个主机可能会有多个IP地址,而只有与主机包相对应的一个,才能被确定为主机IP。。。还有很多其他值的。。

再次感谢!

论坛徽章:
0
5 [报告]
发表于 2008-08-15 15:13 |只看该作者
原帖由 yingweixu 于 2008-8-15 14:36 发表
#!/usr/bin/perl -w
use Sys::Hostname;
my $host=hostname;
print"$host\n";



这个执行的结果,是solaris01.jjqing.com,我想要的结果是最前面那个单词(solaris01),因此,才想用AWK做一些处理。

谢谢!

==========================
bash-3.00# ./1
solaris01.jjqing.com
==========================
bash-3.00# hostname
solaris01.jjqing.com

论坛徽章:
0
6 [报告]
发表于 2008-08-15 15:28 |只看该作者
split

论坛徽章:
0
7 [报告]
发表于 2008-08-15 16:31 |只看该作者

回复 #5 jjqing 的帖子

#!/usr/bin/perl -w
open FILE,"/etc/hosts"||die"Can't open the file!";
chomp(my @info=<FILE>;
my @a=split/\s+/,$info[-1];
my @name=split/\./,$a[1];
print"$name[0]\n";

这是一个很笨的办法!

论坛徽章:
0
8 [报告]
发表于 2008-08-15 16:56 |只看该作者
没想到在perl下要取一个系统参数这么困难啊!

谢谢!我试试看!

另外,我想问问有没有一种简单的方案,我先把hostname的所有输出保存到变量a,然后对a做处理,最后得到solairs01?

#!/usr/bin/perl -w
$a = `hostname`;
$b = 此处使用perl语法取得"solaris01"字段;
print $b;


我的hostname为solaris01.jjqing.com。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2008-08-15 17:25 |只看该作者
原帖由 jjqing 于 2008-8-15 16:56 发表
没想到在perl下要取一个系统参数这么困难啊!

谢谢!我试试看!

另外,我想问问有没有一种简单的方案,我先把hostname的所有输出保存到变量a,然后对a做处理,最后得到solairs01?

#!/usr/bin/perl -w ...


#!/usr/bin/perl -w
use strict;

my $my_hostname = `hostname`;
$my_hostname =~ s/\..*//;
print $my_hostname;


变量名不要用$a,$b。
perl是超级的awk+sed+grep。

论坛徽章:
0
10 [报告]
发表于 2008-08-15 17:33 |只看该作者
谢谢!

我想再问问,能不能再进一步,把中间的临时变量省略掉,直接用perl将"solaris01.jjqing.com"变成“solaris01"呢?

即将下面两行代码变成一行:
my $my_hostname = `hostname`;
$my_hostname =~ s/\..*//;

请问要怎么做?在SHELL中我知道是用管道符“|”,但是在perl中我不知道怎么做。

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP