PERL命令行
perl命令行操作需要加上-e否则会寻找perl脚本文件,命令用单引号包围,双引号会被OS认为是变量
PERL命令行参数
-
-n参数
-n参数相当于创建while循环
while(<>) { commands; }
-
-p参数
-p参数创建while循环,下一步打印
while(<>) { command; } continue { print or die }
-
-i参数
直接对操作对象进行修改
perl特殊变量
Special variable | Meaning |
---|---|
$_ | 默认的输入和模式搜索空间 |
$. | 读取的最后一个文件柄的当前输入行号 |
$/ | 输入记录的分隔符,默认为换行。 |
$ | 输出记录的分隔符,默认为换行。 |
$, | 打印输出字段分隔符 |
$‘’ | 连接字符串中插值的数组元素的分隔符 |
$0 | 正在执行的Perl脚本的文件名称 |
换行
-n和-p选项虽然仅有很小的差别,但是产生的结果会有很大的不同
I Do Not Love You Except Because I Love You :
I do not love you except because I love you;
I go from loving to not loving you,
From waiting to not waiting for you
My heart moves from cold to fire.
I love you only because it's you the one I love;
I hate you deeply, and hating you
Bend to you, and the measure of my changing love for you
Is that I do not see you but love you blindly.
Maybe January light will consume
My heart with its cruel
Ray, stealing my key to true calm.
In this part of the story I am the one who
Dies, the only one, and I will die of love because I love you,
Because I love you, Love, in fire and blood.
双倍行距
设定输出分隔符
perl -pe '$/ = "
"' poem
当前读入行追加换行
perl -pe '$_ .= "
"' poem
or
perl -ne 'print $_ .= "
"' poem
空行外两倍行距
匹配文本开头存在的行
perl -pe '$_ .= "
" if /./'
排除空行
perl -pe '$_ .= "
" unless /^$/' poem
多倍行距
perl -pe '$_ .= "
"x4 if /./' poem
移除空行
perl -ne 'print if /./' poem
or
perl -ne 'print unless /^$/' poem
文本单词间两倍间距
perl -pe 's/ / /g' poem
移除单词间的空格
perl -pe 's/ +//g' poem
编号
所有行进行编号
perl -pe '$_ = "$. $_"' poem
or
perl -ne 'print $. $_' poem
非空行编号空行不保留
perl -ne 'print "$. $_" if /./' poem
or
perl -ne 'print "$. $_" if /S/' poem
or
perl -ne 'print "$. $_" unless /^$/' poem
上述命令执行的结果是文本原始的行数编号,所以不连续
perl -ne 'print ++$x." $_" if /./' poem
or
perl -ne 'print ++$x." $_" if /S/' poem
or
perl -ne 'print ++$x." $_" unless /^$/' poem
非空行编号空行保留
perl -pe '$_ = ++$x." $_" if /./'
or
perl -pe '$_ = ++$x." $_" if /S/'
or
perl -pe '$_ = ++$x." $_" unless /^$/'