收藏 分享(赏)

Matlab-dos-perl.docx

上传人:dreamzhangning 文档编号:2309045 上传时间:2018-09-10 格式:DOCX 页数:10 大小:28.12KB
下载 相关 举报
Matlab-dos-perl.docx_第1页
第1页 / 共10页
Matlab-dos-perl.docx_第2页
第2页 / 共10页
Matlab-dos-perl.docx_第3页
第3页 / 共10页
Matlab-dos-perl.docx_第4页
第4页 / 共10页
Matlab-dos-perl.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、http:/ Perl 用作命令行操作的快速而又难看的脚本是很有用的;通过命令行,Perl 仅用一行就可以实现大多数其它语言需要数页代码才能完成的任务,这个小东东的功能可是非常强大的。参数:-w 打开警告。-i 在原文件中编辑(就地编辑)。-i.bak 就地编辑,但是会备份原文件,并且以.bak 为后缀,这个.bak 可以修改成自己想要的任何符号。-n 使用将所有ARGV 参数当作文件来逐行运行,会将读入的内容隐式的逐一按行来遍历文件,每一行将缺省保存在 $_;意即会把输入的文件逐行的读取并保存在$_这个变量中,我们修改$_ 相当于间接影响文件中的内容,这个工作其实是 perl 封装好了的,直

2、接使用就好了;这个参数不会自动打印$_。-p 这个和-n 类似,但是会打印$_。-e 指定字符串用作脚本执行;通常后跟单引号,把需要执行的语句封装在其中。注释:关于-p 和-n 开关的使用,当你想显示打印数据时,使用-n 开关;-p 开关会隐式 的打印$_;因此,-n 开关更加适用对文件进行选择性的处理,只需打印特殊的数据,-p 更加适用于对文件进行完全处理;命令行 perl 同样可以对批量文件进行操作。替换 A 为 Bperl -i -pe s/old_str/new_str/g files替换 A 为 B 并备份perl -i.bak -pe s/old_str/new_str/g fil

3、es修改并输出到屏幕perl -ne s/old_str/new_str/g;print; files此处修改后输出到屏幕,但并不会改变原文件。搜索满足条件的行perl -i -ne print if /condition/ files在文件中插入行号perl -i -pe $_ = sprintf “d %s”, $. , $_ files在匹配的某行行首添加字串perl -i -pe print “string” if /condition/ files在匹配的某行行尾添加字串perl -i -pe chomp; $_ = $_ . “stringn” if /condition/ fil

4、es在匹配的某行前增加一行perl -i -pe print “stringn” if /condition/ files在匹配的某行后增加一行perl -i -pe $_ = $_ . “stringn” if /condition/ fileshttp:/kasy- 的字符串匹配与替换匹配:m/ (还可以简写为 / ,略去 m)替换:s/转化:tr/这三种形式一般都和 = 或 ! 搭配使用(其中 “=“ 表示相匹配,在整条语句中读作 does,“!“ 表示不匹配,在整条语句中读作 doesnt),并在左侧有待处理的标量变量。如果没有该变量和 = ! 操作符,则默认为处理 $_ 变量中的内容

5、。举例如下:$str = “I love Perl“;$str = m/Perl/; # 表示如果在 $str 中发现 “Perl“ 字符串,则返回 “1“ 否则返回 “0“。$str = s/Perl/BASH/; # 表示将变量 $str 中的 “Perl“ 字符串替换为 “BASH“ ,如果发生此替换则返回 “1“,否则返回 “0“。$str ! tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 “0“,否则返回 “1“ 。另外还有:foreach (array) s/a/b/; # 此处每次循环将从 array 数组中取出一个元素

6、存放在 $_ 变量中,并对 $_ 进行替换处理。while () print if (m/error/); # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 请看下面的例子:$string = “I love perl“;$string = s/(love)/; # 此时 $1 = “love“,并且该替换的结果是将 $string 变为 “I perl“$string = “i love perl“;$string = s/(i)(

7、.*)(perl)/$2/; # 这里 $1 = “i“,$2 = “ love “,$3 = “perl“,并且替换后 $string 变为 “ love “替换操作 s/ 还可以在末尾加上 e 或 g 参数,他们的含义分别为:s/g 表示把待处理字符串中所有符合 的模式全部替换为 字符串,而不是只替换第一个出现的模式。s/e 表示将把 部分当作一个运算符,这个参数用的不多。比如下面的例子:$string = “i:love:perl“;$string = s/:/*/; #此时 $string=“i*love:perl“;$string = “i:love:perl“;$string =

8、s/:/*/g; #此时 $string=“i*love*perl“; $string = tr/*/ /; #此时 $string=“i love perl“; $string = “www22cgi44“;$string = s/(d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 “www44cgi88“。一个完整的例子:# Perl 的字符串匹配: =m/pattern/ ,其中 m 可省略# 匹配字符串变量$string 中是否存在子串 regexmy $string = “regex

9、 exists!“;print “string: $stringn“;if ($string = m/regex/) print “matchn“; else print “no matchn“;#Perl 的字符串替换: =s/regex/replacement/g ,其中 g 指将字符串中的所有regex子串全部替换# 匹配字符串变量$string 中是否存在子串 regex,并用relacement替换$string = s/regex/replacement/g;print “string: $stringn“;运行结果:string: regex exists!matchstring

10、: replacement exists!二、正则表达式中的一些常用模式/pattern/ 结果. 匹配除换行符以外的所有字符x? 匹配 0 次或一次 x 字符串x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数.* 匹配 0 次或一次的任何字符.+ 匹配 1 次或多次的任何字符m 匹配刚好是 m 个 的指定字符串m,n 匹配在 m 个 以上 n 个 以下 的指定字符串m, 匹配 m 个 以上 的指定字符串 匹配符合 内的字符 匹配不符合 内的字符0-9 匹配所有数字字符a-z 匹配所有小写字母字符0-9 匹配所有非数字字符a-

11、z 匹配所有非小写字母字符 匹配字符开头的字符$ 匹配字符结尾的字符d 匹配一个数字的字符,和 0-9 语法一样d+ 匹配多个数字字符串,和 0-9+ 语法一样D 非数字,其他同 dD+ 非数字,其他同 d+w 英文字母或数字的字符串,和 a-zA-Z0-9 语法一样w+ 和 a-zA-Z0-9+ 语法一样W 非英文字母或数字的字符串,和 a-zA-Z0-9 语法一样W+ 和 a-zA-Z0-9+ 语法一样s 空格,和 ntrf 语法一样s+ 和 ntrf+ 一样S 非空格,和 ntrf 语法一样S+ 和 ntrf+ 语法一样b 匹配以英文字母,数字为边界的字符串B 匹配不以英文字母,数值为边

12、界的字符串a|b|c 匹配符合 a 字符 或是 b 字符 或是 c 字符 的字符串abc 匹配含有 abc 的字符串(pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 2 变量,以此类推下去。/pattern/i i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。 如果要在 pattern 模式中找寻一个特殊字符,如 “*“,则要在这个字符前加上 符号,这样才会让特殊字符失效下面给出一些例子: 范例 说明/perl/

13、 找到含有 perl 的字符串/perl/ 找到开头是 perl 的字符串/perl$/ 找到结尾是 perl 的字符串/c|g|i/ 找到含有 c 或 g 或 i 的字符串/cg2,4i/ 找到 c 后面跟着 2 个到 4 个 g ,再跟着 i 的字符串/cg2,i/ 找到 c 后面跟着 2 个以上 g ,再跟着 i 的字符串/cg2i/ 找到 c 后面跟着 2 个 g,再跟着 i 的字符串/cg*i/ 找到 c 后面跟着 0 个或多个 g ,再跟着 i 的字符串,如同/cg0,1i/cg+i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg1,i/cg?i/ 找到 c 后

14、面跟着 0 个或是 1 个 g ,再跟着 i 的字符串,如同/cg0,1i/c.i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串/ci/ 找到 c 后面跟着二个任意字符,再跟着 i 的字符串/cgi/ 找到符合有这三个字符任意一个的字符串/cgi/ 找到没有这三个字符中任意一个的字符串/d/ 找寻符合数字的字符,可以使用/d+/来表示一个或是多个数字组成的字符串/D/ 找寻符合不是数字的字符,可以使用/D+/来表示一个或是更多个非数字组成的字符串/*/ 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 符号,这样才会让这个特殊字符失效/abc

15、/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写三、正则表达式的八大原则如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在 Perl 语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原

16、则。正则表达式在对付数据的战斗中可形成庞大的联盟这常常是一场战争。我们要记住下面八条原则: 原则 1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /)。 原则 2:正则表达式仅对标量进行匹配( $scalar = m/a/; 可以工作; array = m/a/ 将把array 作为标量对待,因此可能不会成功)。 原则 3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = string string2; $a = s/string/ /; 导致 $a = string 2)。 原则 4:正则表达式能够处理双引

17、号所能处理的任意和全部字符( $a = m/$varb/ 在匹配前把 varb 扩展为变量;如果 $varb = a $a = as,$a = s/$varb/ /; 等价于 $a = s/a/ /; ,执行结果使 $a = “ s“ )。 原则 5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a= m/pattern/ 表示 $a 中是否有子串 pattern 出现, $a = s/(word1)(word2)/$2$1/ 则“调换”这两个单词。 原则 6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a = m/w+/ 匹配一个或多个单词字符; $a = m/d/“ 匹配零个或多个数字。 原则 7:如果欲匹配不止一个字符集合,Perl 使用 “|“ 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。 原则 8:Perl 用 (?) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a = m/ERROR/ 是在 $a 中查找子串 ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报