perl apache服务
启动 http 服务 /etc/rc.d/init.d/httpd start
let this service startup with the OS by typing “chkconfig --level 35 httpd on”
运行目录 /var/www/cgi-bin/
locate hello.pl by entering “http://10.198.91.80/cgi-bin/hello.pl” in IE
Httpd: WEB服务器
访问文件时候的 500错误解决:
chmod a+rx hello.pl (change mode of hello.pl and make everyone is able to read and execute hello.pl )
用户输入
sub user_input {
my $input = '';
$input = <STDIN>;
chop($input);
$input =~ //s*(/S+)/s*/;
return $1;
}
查看模块是否可用
perl -e 'use Getopt::Long'
Getopt::Long模块的使用
#!/usr/bin/perl -w
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
my $result = GetOptions ("length=i" => /$length, # numeric
"file=s" => /$data, # string
"verbose" => /$verbose); # flag
print "length = $length /n";
print "file = $data /n";
print "verbose = $verbose/n";
[autozone@cdc-vita yhan]$ perl -w getopt.pl -length 2 -file "abc.txt" -verbose 123 123 12321 34234
length = 2
file = abc.txt
verbose = 1 // 调用 -verbose 变量 verbose 值设为 1 ,默认不设置。
有关数组的库函 数
(1)sort--按字符顺序排序
@array = ("this", "is", "a","test");
@array2 = sort(@array); # @array2 = ("a","is", "test", "this")
@array = (70, 100, 8);
@array = sort(@array); # @array = (100, 70, 8) now
( 2)reverse--反转数组
@array2 = reverse(@array);
@array2 = reverse sort (@array);
(3)chop--数组去尾
chop的意义是去掉 STDIN(键盘)输入字符串时最后一个字符 --换行符。而如果它作用到数组上,则将数组中每一个元素都做如此处理。
@list = ("rabbit", "12345","quartz");
chop (@list); # @list = ("rabbi", "1234","quart") now
( 4)join/split--连接 /拆分
join的第一个参数是连接所用的中间字符,其余则为待连接的字符数组。
$string = join(" ", "this", "is","a", "string"); # 结果为 "this is a string"
@list = ("words","and");
$string = join("::", @list, "colons"); #结果为 "words::and::colons"
@array = split(/::/,$string); # @array = ("words","and", "colons") now
perl 的 telnet模板使用小结
http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.pm
(1) missing opening delimiter of match operator at telnet_Test2.pl line 16
在匹配的 my $prompt = '/cdc-d2950l20:~ #/'; 中要添加 / / 。
(2)Log 设定
$telnet->input_log("log 地址 ");
$telnet->input_log("/home/autozone/yhan/log");
(3)Prompt 要与 cmd 进行搭配
# 创建的使用需要制定对应的 $prompt
my $prompt = '/cdc-d2950l20:~ #/';
my $telnet=new Net::Telnet(Prompt=>"$prompt");
cdc-d2950l20:~ # ls
.Xauthority .rhosts bin
.bash_history .ssh file
.exrc .suse_register.log mbox
.gnupg .viminfo vxexplore.tar.Z
.kbd .wapi yhan
.lesshst VRTSexplorer
.qt VRTSvita-SUT-1.0-09.00.x86_64_linux.rpm
(4) 使用 print () 要和 waitfor() 进行搭配。
比如:
$telnet->print(“ls”);
$telnet->waitfor(Match=>'/assword/', Timeout=>20);print $telnet->cmd("ls");
Use a combination of print() and waitfor() as an alternative to login() or cmd() when they don't do what you want.
目录操作
perl的批处理
一般情况 sed 也可以
sed -i 's//.$//!/g' regular_express.txt
# 上头的 -i 选项可以让你的 sed 直接去修改后面接的档案内容而不是由萤幕输出喔!
# 这个范例是用在取代!请您自行 cat 该档案去查阅结果啰!
Linux perl系统下批量替换文件内 容
find -name '要查找的文件名 ' | xargs perl -pi -e 's|被替换的字符串 |替换后的字符串 |g'
perl -pi -e
在 Perl 命令中加上 -e 选项,后跟一行代码,就会像运行一个普通的 Perl 脚本那样运行该代码 .
从命令行中使用 Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作 .
批替换
#perl -pi -e’s/aaa/bbb/’ filename
修改当前 file文件中的文件 ,不生成中间文件 ,速度很快 .记住 -i 开关,因为它让你原地编辑文件 .
匹配一行并显示出来
#perl -ne ‘print if /^aaaaa/’ filename
象 grep 一样过滤文件中需要的内容 . 这个地方 , 使用了 -n, 所以一次是做一行的操作 , 直到整个文件读完 . 另外 , 在管道时 ,-n 也会一样 , 来 遍历管道送过来的内容 .
给当前文章的添加一行号
#perl -n -e ‘print "$. – $_"’ filename
这个例子中的 , 没用 -ne, 只是命令写成了 -n -e, 其实一样 , 这个例子中 , 是给当前文件中的内容都加一个行号打印出来 . 注 :$. 表示当前行号
给当前文章的添加一行号
#perl -pe ‘$_ = "$. $_"’ filename 这个其实和上面一样 , 分别只是使用了 -p 替换了 -n, 这个有个什么好处啦 , 别的地方都一样 , 但 -p 按行来遍历完文件后 , 会给 $_ 打印出来 .
代替 awk来使用
大 家还记得 awk 分割域 (awk ‘{i = NF – 1; print $1 + $i}’) 啊 , 是不是很方便 , 下面我们来看看 perl
#perl -lane ‘print $F[0] + $F[-2]‘ 这个神奇的地方在于 -a, 使用 -a 后 . 因为 -n 分行读进来 , 然后 -a 给数据分割成 @F 的数组 .
打印正则中从 $start 到 $end 的地方
#perl -ne ‘print if /^START$/ .. /^END$/’
有效地打印数字范围中的行
#perl -ne ‘print if $. >= 15; exit if $. >= 17;’
原地修改 -i 开关的神奇之处在于它对 @ARGV 中的每个文件都用该脚本对该文件输出所产生的文件版本进行替代
#perl -p -i.bak -e ’s//bfoo/b/bar/g’ *.c
给文件中的内容反向排序 , 比如文件中有 fukai, 就会变成 iakuf
#perl -ne ‘print scalar reverse $_’ test
关于 sed grep的文字处理
[root@www ~]# sed [-nefr] [ 动作 ]
选项与参数:
-n :使用安静 (silent) 模式。在一般 sed 的用法中,所有来自 STDIN
的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过
sed 特殊处理的那一行 ( 或者动作 ) 才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
sed 动作;
-r : sed 的动作支援的是延伸型正规表示法的语法。 ( 预设是基础正规表示法语法 )
-i :直接修改读取的档案内容,而不是由萤幕输出。
动作说明:
[n1[,n2]]function
n1, n2 :不见得会存在,一般代表 ‘ 选择进行动作的行数 ’ ,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则 ‘ 10,20[ 动作行为 ] ’
function 有底下这些咚咚:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现 ( 目前的下一行 ) ~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现 ( 目前的上一行 ) ;
p :列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
正规表示法!例如 1,20s/old/new/g 就是啦!
以行为单位的新增 /删除功能
范例一:将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
范例二:承上题,在第二行后 (亦即是加在第三行 )加上 ‘drink tea?’字样!
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
范例三:在第二行后面加入两行字,例如 ‘Drink tea or .....’与 ‘drink beer?’
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ....../
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....( 后面省略 ).....
以行为单位的取代与显示功能
范例四:我想将第 2-5行的内容取代成为 ‘No 2-5 number’呢?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....( 后面省略 ).....
范例五:仅列出 /etc/passwd 档案内的第 5-7 行
[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
部分资料的搜寻并取代的功能
sed 's/ 要被取代的字串 / 新的字串 /g'
步骤一:先观察原始讯息,利用 /sbin/ifconfig 查询 IP 为何?
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100
Bcast:192.168.1.255
Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....( 以下省略 ).....
# 因为我们还没有讲到 IP ,这里你先有个概念即可啊!我们的重点在第二行,
# 也就是 192.168.1.100 那一行而已!先利用关键字捉出那一行!
步骤二:利用关键字配合 grep 撷取出关键的一行资料
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr'
inet addr
:192.168.1.100
Bcast:192.168.1.255
Mask:255.255.255.0
# 当场仅剩下一行!接下来,我们要将开始到 addr: 通通删除,就是像底下这样:
# inet addr:192.168.1.100
Bcast:192.168.1.255
Mask:255.255.255.0
# 上面的删除关键在于 ‘ ^.*inet addr: ’ 啦!正规表示法出现! ^_^
步骤三:将 IP 前面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | /
>
sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
# 仔细与上个步骤比较一下,前面的部分不见了!接下来则是删除后续的部分,亦即:
# 192.168.1.100
Bcast:192.168.1.255
Mask:255.255.255.0
# 此时所需的正规表示法为: ‘ Bcast.*$ ’ 就是啦!
步骤四:将 IP 后面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | /
>
sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100