Chinaunix

标题: per开始行加入字符 [打印本页]

作者: 1249068807    时间: 2015-01-08 15:25
标题: per开始行加入字符
怎样在文本开始第一行加入 .EQUATION  第二行加  .MEGA  第三行加入   .param

作者: donalds2008    时间: 2015-01-09 11:04
本帖最后由 donalds2008 于 2015-01-09 11:08 编辑
  1. open FH_IN, '<', 'in.txt';#
  2. open FH_OUT, '>>', 'out.txt';
  3. my @content = split /\n/,do {local $/; <FH> };
  4. close FH_IN;
  5. my $str;
  6. foreach my $row (0..$#content){
  7.    ($str) = ( $content[$row] =~ s/^/\.EQUATION/) if  $row=0;
  8.   ($str) = ( $content[$row] =~ s/^/\.MEGA/) if  $row=1;
  9.   ($str) = ( $content[$row] =~ s/^/\.param/) if  $row=2;
  10.    print FH_OUT $str."\n";
  11. }
  12. close FH_OUT;
复制代码

作者: donalds2008    时间: 2015-01-09 11:12
或者用sed
  1. sed -i '1s/^/\.EQUATION/' in.txt
  2. sed -i '2s/^/\.MEGA/' in.txt
  3. sed -i '3s/^/\.param/' in.txt
复制代码

作者: 1249068807    时间: 2015-01-09 17:09
谢谢 大牛啊  如果下面我要替换所有的 n18ll为  n13  那按照第一种该怎么写呢
作者: 1249068807    时间: 2015-01-09 17:37
    open FH_IN, '<', 'in.txt';#
    open FH_OUT, '>>', 'out.txt';
    my @content = split /\n/,do {local $/; ‘<FH>’ };
    close FH_IN;
    my $str;
    foreach my $row (0..$#content){
       ($str) = ( $content[$row] =~ s/^/\.EQUATION/) if  $row==0;
      ($str) = ( $content[$row] =~ s/^/\.MEGA/) if  $row==1;
      ($str) = ( $content[$row] =~ s/^/\.param/) if  $row==2;
       print FH_OUT $str."\n";
    }
    close FH_OUT;
我这样修改了下 但是结果只出来了 1  请问大牛什么原因阿
作者: donalds2008    时间: 2015-01-09 18:46
本帖最后由 donalds2008 于 2015-01-09 18:48 编辑

不好意思,试试这个。
  1. $str=  $content[$row];
  2. ($str=~s/^/\.EQUATION/) if  $row=0;
  3.   ($str=~s/^/\.MEGA/) if  $row=1;
  4.   ($str=~s/^/\.param/) if  $row=2;
复制代码
回复 5# 1249068807


   
作者: donalds2008    时间: 2015-01-09 20:41
本帖最后由 donalds2008 于 2015-01-09 22:13 编辑

my $row=0;
while(<FH_IN>){
s/^/\.EQUATION/ if $row==0;
其他行类推
print FH_OUT $_;
$row++;
}
这样更高效
作者: 1249068807    时间: 2015-01-12 09:53
谢谢楼上的兄弟  我现在这样写了 写出来了  
#!usr/bin/perl -w
my $line =0
open (FH,“ 〉 TESTOUT”)or die “cann't open”;
while(<> ){
     $line ++;
       if($line ==1)
      print FH  "\.EQUATION\n";
    }
       elsif($line ==2)
      print FH  "\.SCAL\n";
    }
      else{
        print FH "$S_\n";
      }
}

3Q   very much  for    donalds2008




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2