程序设计:perl:perl单行脚本

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
程序设计:perl:perl单行脚本 [2022/09/22 00:47]
60.188.10.171 已恢复为旧版 (2022/09/13 22:48)
程序设计:perl:perl单行脚本 [2022/12/07 17:18] (当前版本)
60.188.10.9 已恢复为旧版 (2022/05/21 21:55)
行 1: 行 1:
 perl单行脚本一般用来提取文件中部分内容或者删除某些部分。使用简单方便,简单介绍下如何操作。 perl单行脚本一般用来提取文件中部分内容或者删除某些部分。使用简单方便,简单介绍下如何操作。
-因为大部分都使用windows,所以我们下面的实例以windows为主+因为大部分都使用windows,所以我们下面的实例以windows为主(Linux下请将"改',\"改")
  
 ====== perl的安装 ====== ====== perl的安装 ======
-windows:[[http://www.activestate.com/activeperl/downloads|下载地址]],下载5.16版本。\\+<WRAP center round important 60%> 
 +请注意:在windows下安装perl,无论是哪种方式,不要将其安装在含有中文或者空格的路径下,否则部分功能将不可用!!! 
 +</WRAP> 
 + 
 +===== windows: ===== 
 +Windows下可以安装ActivePerl或者StrawBerry Perl,下面分别介绍。 
 + 
 +====  ActivePerl ==== 
 +下载[[http://www.activestate.com/activeperl/downloads|ActivePerl]]的5.16版本,安装。\\ 
 +windows中安装完按win+r快捷键,输入cmd,回车,在弹出界面中输入以下行即可 
 + 
 +==== StrawBerry Perl ==== 
 +下载[[http://pan.baidu.com/share/link?shareid=1797695320&uk=856011220|StrawBerry Perl]] ,这个是绿色便携版,解压即可使用 <wrap info>推荐</wrap>\\ 
 +或者到官网上下载[[http://strawberryperl.com/releases.html|StrawBerry Perl]],<wrap important >请不要下载5.18版本或者5.10以前的版本</wrap>,防止新版本不稳定和版本过老。\\ 
 +如果是安装包,可以直接安装后使用\\ 
 +如果是绿色版,解压下载的文件(解压后约290M),点击<wrap hi>portableshell.bat</wrap>文件,即可与命令行一样使用 
 + 
 +===== Linux  =====
 Linux一般自带perl,不需要安装,不过版本可能比较低,可以下载新的版本。 Linux一般自带perl,不需要安装,不过版本可能比较低,可以下载新的版本。
  
-windows中按win+r快捷键,输入cmd,回车,在弹出界面中输入以下行即可+
  
 ====== perl脚本使用 ====== ====== perl脚本使用 ======
行 15: 行 32:
 常见命令选项: 常见命令选项:
 <code> <code>
- -l表示print每次都在输出回车+ -l 
 +    对输入内容自动chomp,对输出内容自动添加换行
  
--a表示用分隔符默认为空白,可以用-F/分隔符/指定)对每行进行分割+-a 
 +    对每行进行分割自动分隔模式,空格分隔$_并保存到@F中。相当于@F = split ”。分隔符默认为空白,可以用-F/分隔符/指定
  
--n表示每次自动读取文件的一行+-n 
 +    自动循环,相当于 while(<>) { 脚本; }
  
--e表示执行引号中的内容 (Linux下用单引号,windows下为双引号,且双引号中的双引号用\"表示)+-e 
 +    表示执行引号中的内容 (Linux下用单引号,windows下为双引号,且双引号中的双引号用\"表示) 
 + 
 +-F 
 +    /分隔符/ 表示在-a中使用分隔符分割 
 + 
 +-p  
 +    自动循环+自动输出,相当于 while(<>) { 脚本; print $_; }, -p 开关更适用于对文件进行的 完全处理,而 -n 开关更适用于 选择性文件处理,这样的处理只需打印特定数据. 
 + 
 +-0<数字> 
 +    (用8进制表示)指定记录分隔符($/变量),默认为换行 
 + 
 +-00 
 +    段落模式,即以连续换行为分隔符 
 + 
 +-0777 
 +    禁用分隔符,即将整个文件作为一个记录 
 + 
 +-i<扩展名> 
 +    原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
  
--F/分隔符/ 表示在-a中使用分隔符分割 
 </code> </code>
  
 其他说明: 其他说明:
  
--a分割出来的字符串在<wrap>$F[0],$F[1],$F[2]...</wrap>+''$.''表示行号 
 + 
 +-a分割出来的字符串在''$F[0],$F[1],$F[2]...''
  
-print为输出,和c中printf类似。使用方式为:print ""+print为输出,和c中printf类似。使用方式为:''print ""''
  
 +windows下glob名字需要在引号里加上:
 +<code>BEGIN { @ARGV = map {glob} @ARGV }</code>
  ===== 去掉空白行 =====  ===== 去掉空白行 =====
  <code perl>perl -ne "print if /./" 输入文件名>输出文件名</code>    <code perl>perl -ne "print if /./" 输入文件名>输出文件名</code>  
行 51: 行 93:
  
  数据  数据
- <file 1.txt>+ <file 1.txt>
 0.19778E+03 0.19728E+03 0.20200E+03 0.21395E+03 0.22597E+03 0.23904E+03 0.19778E+03 0.19728E+03 0.20200E+03 0.21395E+03 0.22597E+03 0.23904E+03
 0.25077E+03 0.26367E+03 0.26713E+03 0.26420E+03 0.25833E+03 0.25192E+03 0.25077E+03 0.26367E+03 0.26713E+03 0.26420E+03 0.25833E+03 0.25192E+03
行 68: 行 110:
  </file>  </file>
 提取奇数行的第 1、4列 提取奇数行的第 1、4列
- <code>perl  -lane "print \"$F[0] $F[3]\" if($.%2==1)" 1.txt>2.txt</code> + <code>perl  -lane "print \"$F[0] $F[3]\" if($.%2==1)" 1.txt>out.txt</code> 
 +提取第一行和3的倍数行 
 + <code>perl  -lane "print  if($.==1 or $.%3==0)" 1.txt>out.txt</code>
 说明: 说明:
  
行 84: 行 127:
 1.txt为输入文件 1.txt为输入文件
  
-2.txt为输出文件+out.txt为输出文件
      
 print表示输出 print表示输出
      
-<code>\"$F[0] $F[3]\"</code>表示,输出每行中的第1、4列+''\"$F[0] $F[3]\"''表示,输出每行中的第1、4列
      
-if($.%2==1)中,$.表示行号,%表示取模+''if($.%2==1)''中,$.表示行号,%表示取模 
 + 
 +''if($.==1 or $.%3==0)'' 表示 第一行和3的倍数行,<wrap em>$.</wrap>表示行号,或者用or,并且用 and
      
 ==== 实例2 ==== ==== 实例2 ====
        
-<file 2.txt>+<file 2.txt>
 0.19778E+03,0.19728E+03,0.20200E+03,0.21395E+03,0.22597E+03,0.23904E+03 0.19778E+03,0.19728E+03,0.20200E+03,0.21395E+03,0.22597E+03,0.23904E+03
 0.25077E+03,0.26367E+03,0.26713E+03,0.26420E+03,0.25833E+03,0.25192E+03 0.25077E+03,0.26367E+03,0.26713E+03,0.26420E+03,0.25833E+03,0.25192E+03
行 117: 行 162:
 <code>perl -F/,/ -lane "print \"$F[0] $F[3]\" if($.%2==1)" 2.txt>out.txt</code> <code>perl -F/,/ -lane "print \"$F[0] $F[3]\" if($.%2==1)" 2.txt>out.txt</code>
  
--F/,/  表示以逗号分隔+''-F/,/'' 表示以逗号分隔 
 + 
 + ===== 处理文本 ===== 
 + 
 +查找修改访问几天前 or 几天内的内容  
 + 
 +<code>perl -le 'print for grep { 7 > -M } glob "*"'</code> 
 + 
 +原地编辑文件,不备份,将文件中的aaa转为bbb 
 + 
 +<code>perl -pie  "s/aaa/bbb/" filename </code> 
 + 
 +用正则表达式修改所有某类型文件, ''BEGIN{@ARGV = map glob,@ARGV}'' 是windows下才需要添加的 
 + 
 +<code>perl  -i.bak  -pe "BEGIN{@ARGV = map glob,@ARGV} s/(windows)/$1&Linux/g"  *.txt</code>
  
-====== perl参数说明 ====== 
-  
-<code> 
-$. 表示行号 
-</code> 
  • 程序设计/perl/perl单行脚本.1663778869.txt.gz
  • 最后更改: 2022/09/22 00:47
  • 60.188.10.171