我在一个文件中匹配一个字符串,并希望在某个文件中打印该字符串后面写的值。这是我试过的代码。它运行良好,但没有产生任何输出
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;几行开头的标志。提前谢谢。
答案 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。