在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4968|回复: 11

[讨论] perl 原地修改

[复制链接]
发表于 2014-7-18 16:53:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
碰到一个问题。有很多个*.txt的文件,分别存在不同的目录下,比如说,每个txt文件下均存在字符abc,想把他们在原文件中直接替换成字符efg,
这个怎么实现perl对读入文件的原地修改啊,就是不写到中间文件中。
发表于 2014-7-22 09:45:44 | 显示全部楼层
一定用Perl吗,shell的话可以这样:

$ find -name '*.txt' -exec sed -i 's/abc/efg/' {} \;

Perl 的话:

$ perl -pi -e 's/abc/efg/g' */*.txt
 楼主| 发表于 2014-7-22 11:10:52 | 显示全部楼层
回复 2# rockyli


3KS,以命令行的形式来处理,这个我基本可以做到。
因为文件数比较多,并且不仅仅有这一个处理,所以想写个脚本文件来实现的。
这种怎么实现原地修改?
发表于 2014-7-22 14:19:58 | 显示全部楼层
这样不就是原地修改了吗?
-i 选项


发表于 2014-7-29 23:00:07 | 显示全部楼层
mkdir new

foreach my $file (glob "*/*.txt") {
  my $readfile=$file;
  $writefile="$readfile";
  
open (read_temp, "< $read_file") ;
open (write_temp, "> ./new/$writefile");
while (<read_temp>) {
  s/abc/efg/g
  print write_temp;
}
close read_temp;
close write_temp;
}
发表于 2014-7-29 23:01:17 | 显示全部楼层
大致就是用perl建立一个new的文件夹,然后将替换完的文件都放入new文件夹,名字和原来一样。
 楼主| 发表于 2014-7-30 15:07:29 | 显示全部楼层
回复 6# bsbs525

3KS!这样做不失为一个办法。
6楼哥们儿,那你会原地修改吗?不产生其他文件,读进去一行内容,修改完后还写回原文件原位置。
发表于 2014-8-4 17:01:28 | 显示全部楼层
能解决问题就行了。

读文件进数组,关掉句柄,处理数组,写文件。这样就不需要中间文件了。
发表于 2014-8-6 13:56:18 | 显示全部楼层
perl的强项不是 in-place edit, 建议用老实的读file,写file方法来实现,

perl强大的是regex和多维数据结构的应用,
 楼主| 发表于 2014-8-8 10:56:24 | 显示全部楼层
回复 9# icfbicfb

正则功能强大,自己也确实用到很多。多维数据结构这块儿,能否提示一下,说个简单的例子也好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-10 06:12 , Processed in 0.035761 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表