Perl一句话命令行编程中常用参数总结(perl脚本调用输入参数)不看后悔

随心笔谈9个月前更新 admin
244 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了 Perl 命令行编程的一些关键功能和常用选项,帮助用户快速掌握 Perl 在命令行环境下的操作。文章主要围绕以下几点展开: 1. **命令行选项**:文章详细解释了 Perl 中常用的命令行参数,如 `-e`(执行字符串命令)、`-M`(导入模块)、`-w`(启用警告信息)、`-n` 和 `-p`(逐行处理文件)等,并通过示例说明了它们的使用场景。 2. **模块导入**:文章介绍了如何使用 `-M` 导入模块,以及 `-m` 与 `-M` 的区别,说明了模块导入的用途和注意事项。 3. **逐行和重复处理**:文章对比了 `-n` 和 `-p` 的不同功能,解释了它们在逐行处理和重复处理文件中的内容时的区别,并提供了具体的例子。 4. **直接修改文件**:文章提到 `-i` 参数可以像 sed 一样直接修改文件内容,并通过示例展示了其用法。 5. **自动分割和字段分割**:文章介绍了 `-a` 和 `-F` 选项,说明它们如何像 awk 一样处理文件内容,并提供了相关示例。 6. **线和分隔符处理**:文章提到 `-l` 参数在处理换行和字段分割时的作用,并通过示例展示了其功能。 文章还列举了多个 Perl 脚本示例,展示了如何使用这些命令进行文件操作、条件打印、正则表达式匹配等操作。文章内容简洁明了,适合 Perl 初学者快速入门。



工作中的线上环境有很多的perl命令行的类似一句话的命令,今天总结下perl的命令行编程的一些东西。

-e

后面紧跟着引号里面的字符串是要执行的命令:

复制代码 代码如下:

king@king:~$ perl -e ‘print “hello world \n”‘

hello world

如果是多个命令就可以使用多个-e,这里是不是想到了sed呢?但是要注意的是中间的哪个“;”.

复制代码 代码如下:

king@king:~$ perl -e ‘print “hello world \n” ;’ -e ‘print “my first perl command line script \n”‘

hello world

my first perl command line script

-M

导入要使用的模块:

复制代码 代码如下:

king@king:~$ perl -MLWP::Simple -e’print head “http://www.chinacache.com”,”\n”‘

text/html; charset=utf-81337525116978307200Apache/2.2.3 (CentOS)

另外-M可以判断某个模块是不是已经安装了

-m 的功能和-M类似,区别在于-M 模块名等同于use 模块名,这样会把一些默认的函数或者其它东西引进过来,-m 模块名 则会关闭这些默认值,这样可以引入一些你只使用的函数;例如上面的例子:

换成-m的话就不会有任何输出;-m 和 -M 通过=来引入某个模块的特别函数.

复制代码 代码如下:

perl -MCGI=’header,start_html’ -e ‘print header, start_html’

-w

等同于use warnings

-n -p

都会使用 <> 将所有 @ARGV 参数当作文件来逐行运行(有循环的意思哦,经常和其它参数一起处理文件),会将读入的内容隐式的逐一按行来遍历文件.每一行将缺省保存在 $_;但-p 会将内容“重复”打印出来,而-n更倾向与打印满足某种条件的行(这这里还有一些有用的变量比如$. 表示当前行的行数):

复制代码 代码如下:

king@king:~$ cat file.txt

A 1

B 2

C 3

king@king:~$ perl -p -e ‘print ‘ file.txt

A 1

A 1

B 2

B 2

C 3

C 3

king@king:~$ perl -n -e ‘print ‘ file.txt

A 1

B 2

C 3

看到这里是不是想到了sed的-n 的特性:

复制代码 代码如下:

king@king:~$ sed -ne ‘p’ file.txt

A 1

B 2

C 3

king@king:~$ sed -e ‘p’ file.txt

A 1

A 1

B 2

B 2

C 3

C 3

-i

将修改直接的写入文件,这个和sed也是一样的哦;

复制代码 代码如下:

king@king:~$ cat file.txt

A 1

B 2

C 3

king@king:~$ perl -pi -e ‘s/A/a/’ file.txt

king@king:~$ cat file.txt

a 1

B 2

C 3

-a

打开自动分离 (split)  模式. 空格是缺省的分离号. 输入根据分离号被分离然后放入缺省数组 @F.

复制代码 代码如下:

king@king:~$ perl -na -e ‘print $F[1],”\n”‘ file.txt

1

2

3

和awk是不是很像?还有更像的,那就是-F

,和awk一样更改字段之间的分割符,默认是空格和tab;

复制代码 代码如下:

king@king:~$ perl -F’:’ -alne ‘print $F[0],” “,$F[-1] if /bash$/’ /etc/passwd

root /bin/bash

king /bin/bash

guest-b0SIey /bin/bash

看到上面的那个-l的参数没?它的最主要的作用就是chomp字段和在每个输出的后面加上“\n”,让输出换行;是不是挺有用的呢?

有没有其它和awk有类似的地方呢?答案是肯定的,

BEGIN{},END{} 是不是也很熟悉呢?

以下是一些常用的简单实例

#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 ‘{i=NF – 1; print $1 + $i}’)啊,是不是很方便,下面我们来看看perl

复制代码 代码如下:

#perl -lane ‘print $F[0] + $F[-2]‘ 这个神奇的地方在于-a,使用-a后.因为-n分行读进来,然后-a给数据分割成@F的数组.

#perl -ne ‘print if /^START$/ .. /^END$/’ 打印正则中从$start到$end的地方

#perl -ne ‘print if $. >=15; exit if $. >=17;’ 有效地打印数字范围中的行

#perl -p -i.bak -e ‘s/\bfoo\b/bar/g’ *.c 原地修改 -i 开关的神奇之处在于它对 @ARGV 中的每个文件都用该脚本对该文件输出所产生的文件版本进行替代

#perl -ne ‘print scalar reverse $_’ test 给文件中的内容反向排序,比如文件中有abc,就会变成cba

您可能感兴趣的文章:Perl命令行应用程序详解perl 调试命令的相关知识小结Perl学习教程之单行命令详解

© 版权声明

相关文章