免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2144 | 回复: 5
打印 上一主题 下一主题

Linux 中用Perl 小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-29 10:22 |只看该作者 |倒序浏览
运用Perl对文件处理,但是不在Perl程序中直接指定文件,而是调用Perl时在调用的命令中指定。
似乎是一个Linux的问题,希望有人能够解答!
比如:
Perl程序为:

use strict;
my $line="N/A";

while($line=<STDIN>) {
           chomp($line);
           $line=~s/\[(\d+)\]/$1/g;
           print $line, "\n";
}

目的是使目标文件每行[num]的方括号去掉,但是目标文件很多,想一个一个操作。
如果不用在perl 中写目标文件? 看见人操作  cat  filename | perl
但是我操作就是不行,只执行了  cat  命令

论坛徽章:
0
2 [报告]
发表于 2010-10-29 10:45 |只看该作者
多个文件的话,用shell结合perl:

for i in *; do perl -pi -e 's/\[(\d+)\]/$1/g' $i;done

论坛徽章:
0
3 [报告]
发表于 2010-10-29 10:55 |只看该作者
我最近也替换文件里的内容。用的这些方法,看看值不值的借鉴:
egrep --color -Rm1  '^\[[0-9]+\]' /directory #查看目录下匹配上的文件内容
egrep -lRm1 '^\[[0-9]+\]' /directory | perl -pi -e 's/\[(\d+)\]/$1/g'

论坛徽章:
0
4 [报告]
发表于 2010-10-29 10:58 |只看该作者
对shell 不是很熟悉, 只是想用命令方式调用文件并用已有的perl处理。实际perl要复杂些。
如perl文件名为perl_start, 待处理的文件分别为A_file, B_file ,C_file & D_file .....还会引入新的文件。
想用文件名在命令行  XXX  A_file XXX perl_start
似乎看见过别人这样用,但是忘记如何操作,能帮忙解答吗?

论坛徽章:
0
5 [报告]
发表于 2010-10-29 11:07 |只看该作者
回复 4# kezhang


    这个 我也准备试试,还没有头绪,看看大家有没方法 。上次试了试,没行。所以用的shell |  perl方式实现的。

论坛徽章:
0
6 [报告]
发表于 2010-10-29 23:22 |只看该作者
多个同样后缀的名字,可以使用find

find . -name "*.aa"|xargs ./perl_start

这样的话,perl_start会带一个数组参数,每个元素就是一个文件名。所以只要在perl_start中修改一下就可以了。
这种方式应该是比较简单的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP