学习一点perl单行命令知识

刘小泽写于2020.3.13
推荐一本书:《Perl One-liners:130 Programs That Get Things Done》
Perl one-liners will make you a shell warrior

必须了解的参数

  • -e:表示运行(execute)

  • -p:运行后打印输出

  • -i:直接将修改内容替换原文(很像sed的-i参数)
    如果感觉不保险,可以使用-i.bak来做个备份,这样perl先会创建一个bak备份文件,然后再修改源文件:perl -pi.bak -e 's/you/me/g' file1 file2 file3

  • -n:表示循环运行每一行,但和-p不同,它不自动输出(要输出需要和print连用)

  • -a:自动将一行的内容按空格分隔(默认是空格)

  • -F:修改分隔符

  • -l:加换行符 (remove the newline at the end)

  • $_:表示当前行

  • $.:当前行号

  • $\:输出分隔符(就像AWK的OFS)
    prints the contents of $_ and appends $\ at the end of the output

  • .:连接两个字符串

  • unless:if not

  • -s : 任意空白字符

  • -S: 非空白字符

perl的一个强大之处在于它的模块库:CPAN,包括超过100,000的模块,其中一个就是List::Util,用来调用其他的实用功能(例如sum)。不过这个不需要安装,它是perl自带的

基础的语句

只有匹配到带有特定字符的行,才替换

perl -pi -e 's/you/me/g if /we/' file

只有包含数字的行,才替换

perl -pi -e 's/you/me/g if/\d/' file

统计出现重复的行

perl -ne 'print if $a{$_}++' file

得到每行的行号

默认使用空格,如果把$.$_放一起,就是空格分隔,左边是行号,右边是每行信息;当然可以用其他分隔符,例如:$.:$_

perl -ne 'print "$. $_"' fle

它等同于:perl -pe '$_ = "$. $_"' file ,就是把$. $_的内容赋值给了原来的$_,然后再输出

得到重复的行和行号 =》 组合上面两个单行命令

perl -ne 'print "$. $_" if $a{$_}++'

加和
perl -MList::Util=sum -alne 'print sum @F'
12 13 # 这里输入
25 #这里输出

其中-MList::Util 表示导入模块;-a参数把输入的内容按空格分隔后,存到了@F中,然后求和

找某天的日期
# 100天前
perl -MPOSIX -le '@t = localtime; $t[3] -= 100; print scalar localtime mktime @t'
# 100天后
perl -MPOSIX -le '@t = localtime; $t[3] += 100; print scalar localtime mktime @t'
获得8位字母的密码
perl -le 'print map { ("a".."z")[rand 26] } 1..8'

"a".."z"获得a-z字母;随机挑一个;挑了8次

数学计算
perl -lane '$sum += $F[0]; END { print $sum }'

-a参数将行拆分成许多fields,存到@F中;然后将第一列$F[0] 加和:$sum+=$F[0] ;运行结束后,输出最后结果

以冒号为分隔符,获取第一列
perl -F: -alne 'print $F[0]' file

加个换行符(多空出来一行)

# 方法一:$\ = OFS in awk (output filed seperator)
perl -pe '$\ = "\n"' file
# 方法二:
perl -pe 'BEGIN { $\ = "\n" }' file
# 方法三:
perl -pe '$_ .= "\n"' file
# 方法四(最清爽的方法):
perl -pe 's/$/\n/' file

加两个换行符是这样

# 方法1. set output seperator 
perl -pe '$\ = "\n\n"'
# 方法2. connect at last
perl -pe '$_ .= "\n\n"'
# 方法3. replace
perl -pe 's/$/\n\n/'

一般单行命令是通过管道接受前面的结果,然后进行处理

打印同一字符串多次

# 1. inserts seven newlines after each line
perl -pe '$_ .= "\n"x7'
# 2. print several times
perl -e 'print "foo"x5'
# or
perl -e 'print "a"x1024'

行前加换行符

# s/regex/replace/
perl -pe 's/^/\n/'

移除空行

Note:Windows uses two characters for the newline.

# -n just execute not print(-p)
perl -ne 'print unless /^$/'

or

# use -l (chomp automatically, to remove the newline at the end)
perl -lne 'print if length'
# means: print the line if it has some length

or remove all spaces/tab (if contains any white character)

perl -ne 'print if /\S/'

Perl’s motto is There’s More Than One Way To Do It 【TIMTOWTDI and pronounced “Tim Toady“】

去掉空格

perl -pe 's/ +//g'

or remove all spaces, tabs, newlines...

perl -pe 's/\s+//g'

or change multi spaces into one

perl -pe 's/ +/ /g'

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到jieandze1314@gmail.com

Welcome to our bioinfoplanet!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容