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

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
程序设计:perl:perl单行脚本 [2022/09/27 04:58]
60.188.10.210 已恢复为旧版 (2022/02/22 22:48)
程序设计:perl:perl单行脚本 [2022/09/28 00:49] (当前版本)
112.13.112.136 已恢复为旧版 (2021/12/01 10:17)
行 1: 行 1:
 perl单行脚本一般用来提取文件中部分内容或者删除某些部分。使用简单方便,简单介绍下如何操作。 perl单行脚本一般用来提取文件中部分内容或者删除某些部分。使用简单方便,简单介绍下如何操作。
-因为大部分都使用windows,所以我们下面的实例以windows为主(Linux下请将"改',\"改")+因为大部分都使用windows,所以我们下面的实例以windows为主
  
 ====== perl的安装 ====== ====== perl的安装 ======
-<WRAP center round important 60%> +windows:[[http://www.activestate.com/activeperl/downloads|下载地址]],下载5.16版本。\\
-请注意:在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脚本使用 ======
行 32: 行 15:
 常见命令选项: 常见命令选项:
 <code> <code>
- -l + -l表示print每次都在输出回车
-    对输入内容自动chomp,对输出内容自动添加换行+
  
--a +-a表示用分隔符默认为空白,可以用-F/分隔符/指定)对每行进行分割
-    对每行进行分割自动分隔模式,空格分隔$_并保存到@F中。相当于@F = split ”。分隔符默认为空白,可以用-F/分隔符/指定+
  
--n +-n表示每次自动读取文件的一行
-    自动循环,相当于 while(<>) { 脚本; }+
  
--e +-e表示执行引号中的内容 (Linux下用单引号,windows下为双引号,且双引号中的双引号用\"表示)
-    表示执行引号中的内容 (Linux下用单引号,windows下为双引号,且双引号中的双引号用\"表示) +
- +
--F +
-    /分隔符/ 表示在-a中使用分隔符分割 +
- +
--p  +
-    自动循环+自动输出,相当于 while(<>) { 脚本; print $_; }, -p 开关更适用于对文件进行的 完全处理,而 -n 开关更适用于 选择性文件处理,这样的处理只需打印特定数据. +
- +
--0<数字> +
-    (用8进制表示)指定记录分隔符($/变量),默认为换行 +
- +
--00 +
-    段落模式,即以连续换行为分隔符 +
- +
--0777 +
-    禁用分隔符,即将整个文件作为一个记录 +
- +
--i<扩展名> +
-    原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。+
  
 +-F/分隔符/ 表示在-a中使用分隔符分割
 </code> </code>
  
行 72: 行 34:
 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>  
行 93: 行 53:
  
  数据  数据
- <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
行 110: 行 70:
  </file>  </file>
 提取奇数行的第 1、4列 提取奇数行的第 1、4列
- <code>perl  -lane "print \"$F[0] $F[3]\" if($.%2==1)" 1.txt>out.txt</code>+ <code>perl  -lane "print \"$F[0] $F[3]\" if($.%2==1)" 1.txt>2.txt</code>
 提取第一行和3的倍数行 提取第一行和3的倍数行
- <code>perl  -lane "print  if($.==1 or $.%3==0)" 1.txt>out.txt</code>+ <code>perl  -lane "print  if($.==1 or $.%3==0)" 1.txt>2.txt</code>
 说明: 说明:
  
行 127: 行 87:
 1.txt为输入文件 1.txt为输入文件
  
-out.txt为输出文件+2.txt为输出文件
      
 print表示输出 print表示输出
行 139: 行 99:
 ==== 实例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
行 162: 行 122:
 <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/,/  表示以逗号分隔
  
- ===== 处理文本 ===== +====== perl参数说明 ====== 
- +  
-查找修改访问几天前 or 几天内的内容  +<code> 
- +$. 表示 
-<code>perl -le 'print for grep { 7 > -M } glob "*"'</code> +</code>
- +
-原地编辑文件,不备份,将文件中的aaa转为bbb,windows下-i要单独放最前面,e放到最后,否则会提示错误 +
- +
-<code>perl -i -pe  "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> +
- +
-感谢老许,列置换: +
- +
-<code>cat datafile | perl -MData::Dumper=Dumper -nale '$x->[$_]->[$n++] = $F[$_] for (0 .. $#F); END { print Dumper($x) }'</code>+
  • 程序设计/perl/perl单行脚本.txt
  • 最后更改: 2022/09/28 00:49
  • 112.13.112.136