perl 如何在指定行插入字符串?

比如:
1 aaaaaa
2 bbbbb
3 .........
. .........
n .........
我想在X行插入lala,怎么做?

第1个回答  推荐于2016-06-07
做个marker,从文件中每读入一行就让marker加1.当marker跟你的x行相同的时候。插入你需要插入的内容。
举个简单的例子:
open IN,"f:/a.txt"||die $!; #读入文件
open OUT,">f:/b.txt"||die $!; #输出文件
$marker=0;
$x=5; #要插入的行
while(<IN>){
$marker++;
if($marker==5){
print OUT "5\tlala\n";
}
print OUT $_;
}
当然你可把他写成一个函数,传参进去,那样更加灵活。希望有帮助~~。追问

open IN,"f:/a.txt"||die $!; #读入文件
open OUT,">f:/b.txt"||die $!; #输出文件
$marker=0;
$x=5; #要插入的行
while(){
$marker++;
if($marker==5){
print OUT "5\tlala\n";
}
print OUT $_; #这行是什么意思??
}

文中倒数第2行是什么意思?
输出文件和原来的文件不是同一个吗?

追答

嗯 是同一个啊。不是同一个的话,你不就把你原来的数据删掉了吗?只是在原来的基础上在特定的位置上插入一条啊。你要的不就是往里面插入一条数据吗?难道我理解错了~~??你可以先运行下嘛。如果不对再讨论讨论~呵呵呵

追问

是这样的:如果我原来是:1 2 3 4 5 运行后变成 1 2 3 4 5 1 2 3 4 5 lala 前面的是我原本的资料,后面是把原来的和新增的一起输出了~``~ 等于说原来的资料多了一份! 你知道有没有>> 到指定行的?

追答

呵呵 我想我理解错了,我以为只需要输出1 2 3 4 5 lala就OK,不好意思。如果是这样的话你就在上面的循环开始前,加一个文件复制吧。像楼下说的那样把文本放在一个数组中,连着输出两次就行了。第一不要加判断语句直接输出,第二次加个判断语句然后输出就OK了。

本回答被提问者采纳
第2个回答  2012-05-22
我只会这么个笨方法:
假设x=5 原数据在test.txt中
$string="lalala\n";
open(IN,"test.txt")||die"Can't open\n";
@array=<IN>;
close(IN);
for($i=0;$i<scalar(@array);$i++)
{
if($i!=5)
{
push(@arr,$array[$i]);
}
else
{
push(@arr,$string);
}
}
print @arr;
第3个回答  2012-05-22
#! usr/bin/perl
my $row=n; #------n就是你设的第几行
my $i=1;
open IN,"< 1.txt"; #--源文件
open OUT,"> out.txt" #-----输出文件
while(<IN>){
print OUT $_ if($i != $row);
print OUT "$_\nlala\n" if($i == $row);
$i++;
}
close IN;
close OUT;追问

能不能在同一个文件中进行操作

perl 如何在指定行插入字符串?
做个marker,从文件中每读入一行就让marker加1.当marker跟你的x行相同的时候。插入你需要插入的内容。举个简单的例子:open IN,"f:\/a.txt"||die $!; #读入文件 open OUT,">f:\/b.txt"||die $!; #输出文件 marker=0;x=5; #要插入的行 while(<IN>){ marker++;if($marker==5)...

linux下如何批量在不同文件中指定行的指定位置插入内容?
可以用perl !\/usr\/bin\/perl my $dir = '\/home\/tmp';opendir (DIR,$dir);my @file = grep { \/^\\w+\/i} readdir(DIR);close DIR;my $i = 0 ;my $ii = $#file;while($i <= $ii){ open FILE, "$dir\/$file[$i]";cat = <FILE>;close FILE;open OUT,">$dir\/$file[$i...

perl脚本如何将某个目录下的文件写入到数组中去或者拼接成一个...
path='C:\\Users\\' ; #路径opendir D1, "$path" or die $!; @array=grep(!\/\\.\\.?$\/, readdir D1); print @array;

用Perl进行文件读写,怎样写入数据换行啊?就是这次写完,关闭,下次打开...
第4行重定向标准错误Perl文件,参数>&STDOUT告诉Perl解释器使用已打开并与STDOUT关联的Perl文件,即Perl文件变量STDERR指向与STDOUT相同的Perl文件。第5、6行分别向STDOUT和STDERR写入数据,因为这两个Perl文件变量指向同一个Perl文件,故两行字符串均写到Perl文件file1中,但顺序却是错误的,怎么回事呢?问题在于UNIX对输出...

Perl中的字符串:基础知识和高级技巧
Perl中的字符串处理是编程中不可或缺的部分,它们由特定引号包围,支持ASCII、UNICODE和转义序列。Perl的字符串长度理论上是无限的,受限于系统的内存资源。创建字符串字面量有多种方式,包括单引号和双引号,单引号不进行变量或转义序列的插值,而双引号则会。例如:在双引号中,若要插入变量或转义序列...

Perl如何取指定字符之前的字符
取指定字符之前的字符的方法是:perl -nle 'if(\/^start:\/ or \/^end:\/){ # 匹配 flag \/([^:]+:)(.*)?\\(?\/; # 正则捕获$1,$2,其中$1是start: 或 end:,$2是'('之前的部分 if($1 eq "start:"){push @{$hash{$1}},$2;$s=$2;} # 如果$1是start:的话,存入key为$...

linux下 如何用perl脚本给程序传参(argv)
把执行perl脚本的指令放在反引号之间 .\/test `perl -e 'print "A"x128'``这个符号在键盘tab的上边,1的左边 还可以放在$()中 .\/test $(perl -e 'print "A"x128')这个test是一个linux命令,最好不要用作程序名

perl如何编写脚本批量替换文本内的字符串?
13@array = ; # 读取文件内容到数组@array 14foreach(@array){ 15 if(\/T(\\d)\\dC\/ or \/T(\\d)\\d+$\/){ # 查找匹配模式T后面跟着一个数字,然后是C或者行尾 16 s\/$1\/1\/; # 使用正则表达式替换第一个括号内的数字为1 17 } 18 print "modified$_"; # 打印修改后的内容,...

如何使用Perl正则表达式匹配以">"开头"<"结尾且中间包含至少一个汉字且...
按照你的要求编写的perl程序如下(见图,正则表达式为左右两个斜杠中间部分)

perl中,怎么把一个字符串填充成固定长度后赋给一个变量
v= sprintf "%-10s",$value;我觉得去掉换行符\\n,才是你想要的

相似回答