如何在特定字符串后查找值并将其打印到其他文件中

时间:2015-09-07 11:31:59

标签: perl

我在一个文件中匹配一个字符串,并希望在某个文件中打印该字符串后面写的值。这是我试过的代码。它运行良好,但没有产生任何输出

use strict;
use warnings;

open(my $file, "<", "abc.txt") || die ("Cannot open file.\n");
open(my $out, ">", "output.txt") || die ("Cannot open file.\n");

while(my $line =<$file>) {
chomp $line;
if ($line =~ /xh = (\d+)/) {
print $out $_;
}
}



abc.txt
a = 1 b = 2 c = 3 d = 4 
+xh = 10 e = 9 f = 11
+some lines
+xh = 12 g=14
+some lines
some lines
+xh = 13 i=15 j=20
some lines   


output.txt
10
12
13

请建议改进​​我的代码。有一个&#34; +&#34;在每个xh之前签名,并且在每个&#34; =&#34;之前和之后都有一个空格。标志。我需要在其他文件中打印xh的每个值。有一个&#34; +&#34;几行开头的标志。提前谢谢。

4 个答案:

答案 0 :(得分:3)

打印$_没有意义,因为它没有在任何地方使用,因此您要检查$1已捕获组的内容,

print $out $1;

答案 1 :(得分:1)

Сухой27已经回答了你的问题。请参阅以下声明:

  

每个xh之前都有一个“+”符号,之前有一个空格   并且在每个“=”符号之后。我需要在其他地方打印xh的每个值   文件。在几行的开头有一个“+”符号。

您可以将正则表达式修改为\+xh = (\d+)

答案 2 :(得分:1)

  <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

<android.support.v4.app.FragmentTabHost
      android:id="@android:id/tabhost"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
</android.support.v4.view.ViewPager>

答案 3 :(得分:0)

你的正则表达式很好,但$_中没有任何内容。捕获不会设置$_,它会设置$1$2等等。

所以你的代码应该是:

while(my $line =<$file>) {
  chomp $line;
  if ($line =~ m/xh = (\d+)/) {

               # here
    print $out $1;
  }
}

有关更详细的说明,请参阅perlretut