加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl命令行-p参数

发布时间:2020-12-15 21:07:36 所属栏目:大数据 来源:网络整理
导读:直接看操作过程吧 [root@Centos5?perl]#?cat?passwd?? 1?root:x:0:0:root:/root:/bin/bash? 2?bin:x:1:1:bin:/bin:/sbin/nologin? 3?daemon:x:2:2:daemon:/sbin:/bin/bash? 4?adm:x:3:4:adm:/var/adm:/sbin/nologin? 5?lp:x:4:7:lp:/var/spool/lpd:/sbin/nol
直接看操作过程吧
 
 
  1. [root@Centos5?perl]#?cat?passwd??
  2. 1?root:x:0:0:root:/root:/bin/bash?
  3. 2?bin:x:1:1:bin:/bin:/sbin/nologin?
  4. 3?daemon:x:2:2:daemon:/sbin:/bin/bash?
  5. 4?adm:x:3:4:adm:/var/adm:/sbin/nologin?
  6. 5?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin?
  7. 6?sync:x:5:0:sync:/sbin:/bin/sync?
  8. 7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown?
  9. 8?halt:x:7:0:halt:/sbin:/sbin/halt?
  10. 9?mail:x:8:12:mail:/var/spool/mail:/sbin/nologin?
  11. 10?news:x:9:13:news:/etc/news:?

passwd文件有10行内容。如果遇到第6行则next到第7行,也就是不打印第6行内容。

 
 
  1. [root@Centos5?perl]#?perl?-pe?'next?if?/^6/'?passwd??
  2. 1?root:x:0:0:root:/root:/bin/bash?
  3. 2?bin:x:1:1:bin:/bin:/sbin/nologin?
  4. 3?daemon:x:2:2:daemon:/sbin:/bin/bash?
  5. 4?adm:x:3:4:adm:/var/adm:/sbin/nologin?
  6. 5?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin?
  7. 6?sync:x:5:0:sync:/sbin:/bin/sync?
  8. 7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown?
  9. 8?halt:x:7:0:halt:/sbin:/sbin/halt?
  10. 9?mail:x:8:12:mail:/var/spool/mail:/sbin/nologin?
  11. 10?news:x:9:13:news:/etc/news:?
奇怪了没有跳过啊,我的命令也没错。试试last呢?
 
 
  1. [root@Centos5?perl]#?perl?-pe?'last?if?/^6/'?passwd??????
  2. 1?root:x:0:0:root:/root:/bin/bash?
  3. 2?bin:x:1:1:bin:/bin:/sbin/nologin?
  4. 3?daemon:x:2:2:daemon:/sbin:/bin/bash?
  5. 4?adm:x:3:4:adm:/var/adm:/sbin/nologin?
  6. 5?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin?
这次正常执行了。这是为什么呢?看下perl -h
? -n????????????? assume "while (<>) { ... }" loop around program
? -p????????????? assume loop like -n but print line also,like sed
看不出啥特殊含义来。
其实-p的真正含义是这样的?
-p等于执行了
while (<>) {
???????? yourcode;
}continue{
???????? print;
}
这个语句对于next是不起作用的,也就是即使有next也会执行continue语句,但是对于last和redo是没有效果的。
 
 
  1. [root@Centos5?perl]#?cat?test.pl??
  2. #!/usr/bin/perl?-w?
  3. use?strict;?
  4. my?$i?=?0;?
  5. ?
  6. while?($i?<=?5)?{?
  7. ????????print?"$in";?
  8. ????????if?($i?==?2)?{?
  9. ????????????????last;?
  10. ????????}?
  11. }?continue?{?
  12. ????$i++;?
  13. }?
先看last:结果如下没有问题。
 
 
  1. [root@Centos5?perl]#?perl?test.pl??
  2. 0?
  3. 1?
  4. 2?
last改为next:
 
 
  1. [root@Centos5?perl]#?perl?test.pl?|head?-5?
  2. 0?
  3. 1?
  4. 2?
  5. 3?
  6. 4?
可见next没有生效,否则将会是一个死循环,打印0 1 2 2 2 ......无数个2.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读