【发布时间】:2014-12-13 20:47:19
【问题描述】:
我正在尝试从文本文件中获取两个值
我的 perl 代码是
#!/usr/bin/perl
use strict;
use Fcntl qw( :flock :DEFAULT );
exit unless sysopen( PID, '1.pid', O_RDWR | O_CREAT ) && flock( PID, LOCK_EX | LOCK_NB );
print PID "$$\n";
while(-s "1.txt")
{
sleep 1;
open(F,"1.txt")||die"12";
my @arr=<F>;
close F;
exit if $#arr==-1;
my $str=shift(@arr);
open(F,">1.txt")||die"13";
print F @arr;
close F;
$str=~s/[\n\r]+//g;
my ($dx,$code)=$str=~/^(\d+):(\w+)$/;
print"($dx)($code)\n";
}
我的文本文件
00001:3wzhs7t2w5t2
00001:3wzhs7t2w5t3
00001:3wzhs7t2w5t4
我的代码输出
()()
我需要
$dx = 00001
$code = 3wzhs7t2w5t2
【问题讨论】:
-
所以你基本上是想删除文件的第一行并写回其余部分,然后输出带括号的第一行内容?如果那是准确的,我会建议使用更短的名称,例如
perl -i -ne 'if ($. == 1) { s/:/)(/; s/^/(/; s/$/)/; print STDERR } else { print }' 2>&1。 -
逐行删除并在循环完成文件清空后提取 $dx = 00001 $code = 3wzhs7t2w5t2
-
为什么你认为每次读完一行都必须重写文件?
标签: perl command-line