`
gelongmei
  • 浏览: 211334 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Perl之单行命令特技

 
阅读更多
[from]http://blog.chinaunix.net/uid-363820-id-3187675.html
替换
将所有C程序中的foo替换成bar,旧文件备份成.bak
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c
很强大的功能,特别是在大程序中做重构。记得只有在UltraEdit用过。 如果你不想备份,就直接写成 perl -p -i -e 或者更简单 perl -pie, 恩,pie这个单词不错
将每个文件中出现的数值都加一
perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 ....
将换行符\r\n替换成\n
perl -pie 's/\r\n/\n/g' file
同dos2unix命令。
将换行符\n替换成\r\n
perl -pie 's/\n/\r\n/g' file
同unix2dos命令。
取出文件的一部分
显示字段0-4和字段6,字段的分隔符是空格
perl -lane 'print "@F[0..4] $F[6]"' file
很好很强大,同 awk 'print $1, $2, $3, $4, $5, $7'。参数名称lane也很好记。
如果字段分隔符不是空格而是冒号,则用
perl -F: -lane 'print "@F[0..4]\n"' /etc/passwd
显示START和END之间的部分
perl -ne 'print if /^START$/ .. /^END$/' file
恐怕这个操作只有sed才做得到了吧……
相反,不显示START和END之间的部分
perl -ne 'print unless /^START$/ .. /^END$/' file
显示开头50行:
perl -pe 'exit if $. > 50' file
同命令 head -n 50
不显示开头10行:
perl -ne 'print unless 1 .. 10' file
显示15行到17行:
perl -ne 'print if 15 .. 17' file
每行取前80个字符:
perl -lne 'print substr($_, 0, 80) = ""' file
每行丢弃前10个字符:
perl -lne 'print substr($_, 10) = ""' file
搜索
查找comment字符串:
perl -ne 'print if /comment/' duptext
这个就是普通的grep命令了。
查找不含comment字符串的行:
perl -ne 'print unless /comment/' duptext
反向的grep,即grep -v。
查找包含comment或apple的行:
perl -ne 'print if /comment/ || /apple/' duptext
相同的功能就要用到egrep了,语法比较复杂,我不会……
计算
计算字段4和倒数第二字段之和:
perl -lane 'print $F[4] + $F[-2]'
要是用awk,就得写成 awk '{i=NF-1;print $5+$i}'
排序和反转
文件按行排序:
perl -e 'print sort <>' file
相当于简单的sort命令。
文件按段落排序:
perl -00 -e 'print sort <>' file
多个文件按文件内容排序,并返回合并后的文件:
perl -0777 -e 'print sort <>' file1 file2
文件按行反转:
perl -e 'print reverse <>' file1
相应的命令有吗?有……不过挺偏,tac(cat的反转)
数值计算
10进制转16进制:
perl -ne 'printf "%x\n",$_'
10进制转8进制: perl -ne 'printf "%o\n",$_'
16进制转10进制:
perl -ne 'print hex($_)."\n"'
8进制转10进制:
perl -ne 'print oct($_)."\n"'
简易计算器。
perl -ne 'print eval($_)."\n"'
其他
启动交互式perl:
perl -de 1
查看包含路径的内容:
perl -le 'print for @INC'
备注
与One-Liner相关的Perl命令行参数:
-0<数字> (用8进制表示)指定记录分隔符($/变量),默认为换行 -00 段落模式,即以连续换行为分隔符 -0777 禁用分隔符,即将整个文件作为一个记录 -a 自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ''。分隔符可以使用-F参数指定 -F 指定-a的分隔符,可以使用正则表达式 -e 执行指定的脚本。 -i<扩展名> 原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。 -l 对输入内容自动chomp,对输出内容自动添加换行 -n 自动循环,相当于 while(<>) { 脚本; } -p 自动循环+自动输出,相当于 while(<>) { 脚本; print; }
1-->显示历史命令使用频率
criver@ubuntu:~$ history | perl -F"\||<\(|;|\`|\\$\(" -alne 'foreach (@F) { print $1 if /\b((?!do)[a-z]+)\b/i }' | sort | uniq -c | sort -nr
    169 ls
     98 vim
     90 python
     27 man

2-->将每个文件中出现的数值都加一
perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 ....
criver@ubuntu:~$ cat ptt1.txt
204.108.13.15 abc [] ServerPath=/home/html/pics 62ms
214.92.113.13 xxx [code=5] ServerPath=/home/html/pages 32ms
criver@ubuntu:~$ perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' ptt1.txt   
匹配servrerpath后的字符并打印出来
criver@ubuntu:~$ perl -ne  'print "$1\n" if  /ServerPath=(\S+)/g' ptt1.txt
/home/html/pics
/home/html/pages

3-->查看包含路径的内容:
perl -le 'print for @INC'

4-->取出文件的一部分
显示字段0-4和字段6,字段的分隔符是空格
perl -lane 'print "@F[0..4] $F[6]"' file
很好很强大,同 awk ‘print $1, $2, $3, $4, $5, $7′。参数名称lane也很好记。
如果字段分隔符不是空格而是冒号,则用
perl -F: -lane 'print "@F[0..4]\n"' /etc/passwd
显示START和END之间的部分
perl -ne 'print if /^START$/ .. /^END$/' file
恐怕这个操作只有sed才做得到了吧……
相反,不显示START和END之间的部分
perl -ne 'print unless /^START$/ .. /^END$/' file
显示开头50行:
perl -pe 'exit if $. > 50' file
同命令 head -n 50
不显示开头10行:
perl -ne 'print unless 1 .. 10' file
显示15行到17行:
perl -ne 'print if 15 .. 17' file
每行取前80个字符:
perl -lne 'print substr($_, 0, 80) = ""' file
每行丢弃前10个字符:
perl -lne 'print substr($_, 10) = ""' file

5-->准备关键词测试时经常需要进行UrlEncode和UrlDecode
以下是2个常用的单行Perl脚本(正则表达式):输入为日志或关键词列表
Urlencode:对 \n 不转码
perl -p -e 's/([^\w\-\.\@])/$1 eq "\n" ? "\n":sprintf("%%%2.2x",ord($1))/eg' keywords.list
UrlDecode:
perl -p -e 's/%(..)/pack("c", hex($1))/eg' query.log

备注
与One-Liner相关的Perl命令行参数

-0<数字>
    (用8进制表示)指定记录分隔符($/变量),默认为换行
-00
    段落模式,即以连续换行为分隔符
-0777
    禁用分隔符,即将整个文件作为一个记录
-a
    自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
-F
    指定-a的分隔符,可以使用正则表达式
-e
    执行指定的脚本。
-i<扩展名>
    原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
-l
    对输入内容自动chomp,对输出内容自动添加换行
-n
    自动循环,相当于 while(<>) { 脚本; }
-p
    自动循环+自动输出,相当于 while(<>) { 脚本; print; }
分享到:
评论

相关推荐

    Perl学习教程之单行命令详解

    通过本文的学习,我们可以看到Perl单行命令的强大之处在于其简洁性和灵活性。它可以轻松地处理各种文本操作,包括但不限于搜索、替换、统计等。对于日常工作中遇到的小型文本处理任务,使用Perl单行命令能够大大提高...

    命令行中执行单行Perl脚本

    ### 命令行中执行单行Perl脚本 ...Perl的强大之处在于其简洁性和灵活性,使得即使是复杂的任务也能通过简单的命令行指令完成。此外,Perl社区提供了丰富的资源和支持,帮助开发者更好地利用这一强大的工具。

    用 Perl 实现的有用的单行程序(pdf)

    ### 使用Perl实现的一行程序详解 #### 一、概述 本文档主要介绍在Linux系统下如何利用Perl语言编写实用的一行脚本。这些脚本能够处理一些简单的任务,特别是那些用传统的Shell命令难以解决的问题。例如,判断一个...

    Perl5语言命令详解.pdf

    这份"Perl5语言命令详解.pdf"文档很可能是全面介绍Perl5语言中各种命令、语法和操作的指南。下面,我们将深入探讨Perl5的一些核心概念和常用命令。 1. **变量**:在Perl5中,变量是用来存储数据的容器,它们以`$`...

    单行Perl教程

    根据给定文件的内容,以下是对单行Perl脚本的基础知识点的详细介绍: ### 单行Perl脚本的概念 单行Perl脚本(Perl one-liners)是一种在命令行上运行的简短Perl代码片段,它们能够完成特定的文本处理或系统管理任务...

    Perl 5 语言命令详解

    Perl 5 语言命令详解版(pdf版,也是影印版)

    perl脚本调用练习和调用系统命令并展示输出信息

    标题 "perl脚本调用练习和调用系统命令并展示输出信息" 提示我们这篇内容主要涉及使用Perl脚本执行系统命令以及如何处理输出信息。Perl是一种强大的文本处理语言,常用于系统管理任务,包括调用其他系统工具或程序。...

    CD命令(学Perl用到)

    CD 命令详解与常用 DOS 命令 CD 命令是 DOS 操作系统中的一种基本命令,用于切换当前目录。CD 命令的使用非常广泛, 在日常的文件管理和文件夹操作中扮演着重要的角色。今天,我们将详细介绍 CD 命令的使用方法和...

    ----- perl 调试命令 -----

    ### Perl调试命令详解 在日常开发工作中,Perl作为一种强大的脚本语言被广泛应用于系统管理、Web开发、网络编程等多个领域。然而,就像任何其他编程语言一样,在开发过程中难免会遇到各种问题,这时就需要借助调试...

    perl(windows环境)

    安装过程中,你可以选择安装路径,以及是否将Perl添加到系统的PATH环境变量中,这样在命令行中就可以直接运行perl命令了。 安装完成后,你可以通过命令行(如cmd.exe)测试Perl是否已经正确安装。打开命令提示符,...

    PERL编写的服务器响应时间(ping)测试

    Perl可以调用操作系统内置的ping命令,通过子进程执行并捕获其输出,从而获取服务器的响应时间数据。 描述中提到的"生成html文件,图形显示"意味着Perl脚本会使用一些库,如GD或Chart::Graph,来创建图表。GD是Perl...

    用 Perl 实现的有用的单行程序

    文档包括Linux系统中用 Perl 实现的有用单行程序, 适合用于无法用简单shell语句完成的命令. 包括文本处理, 系统命令, 字符串处理等. 比如: # 判断一个数是否是质数: perl -lne '(1x$_) !~ /^1?$|^(11+?)\1+$/ && ...

    linux 下安装perl的详细过程

    安装完成后,可以通过执行`perl -v`命令来验证Perl是否安装成功及其版本信息。 ```bash # 验证Perl安装 perl -v ``` #### 其他注意事项 - 在配置阶段,可能会根据实际需求调整`Configure`脚本的参数,例如指定安装...

    perl/tk常用命令

    通过阅读`perl_tk1.pdf`, `perl_tk2.pdf`, 和`perl_tk3.pdf`,你可以深入了解更多的命令和实践示例,进一步提升Perl/Tk编程技能。记得实践中不断探索和实验,以更好地理解和掌握这个强大的工具包。

    perl常用命令_函数集.pdf

    Perl 常用命令_函数集 Perl 是一种功能强大且灵活的编程语言,提供了许多实用的命令和函数来帮助开发者进行开发。下面将对 Perl 常用命令_函数集进行详细的解释和总结。 一、进程处理函数 进程处理函数是 Perl 中...

    perl 命令行模式

    1. **正则表达式**:Perl是正则表达式的自然之选,它的语法强大且灵活。在命令行中,你可以使用`-p`和`-n`选项来逐行读取文件,并使用正则表达式进行匹配和替换。 2. **命令行开关**:Perl允许使用各种开关来改变其...

    Perl-5.10.0版本

    Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0...

    make(perl编译命令)

    This package implements 'make' in perl. Requires perl5.005 or later as it uses some of new regular expression features. To install perl Makefile.PL perl -I. pmake perl -Mblib pmake test perl -...

    linux yum离线资源离线资源perl-5.26.1

    `perl`是一种通用的、高级的、解释型的、动态的编程语言,广泛应用于系统管理、网络编程、Web开发等领域。`perl-5.26.1`指的是Perl编程语言的5.26.1版本。在这个离线资源包中,我们重点关注的是如何在没有网络的情况...

    PERL语言编程

    和严格的每次执行一条命令的命令文件和 shell 脚本不同的是,Perl 先把你的程序快速编译成一种内部格式。和其它任何编译器一样,这个时候还进行各种优化,同时把碰到的任何问题反馈给你。一旦 Perl 的编译器前端对你...

Global site tag (gtag.js) - Google Analytics