【问题标题】:How to find a value after a particular string and print it other file如何在特定字符串之后查找值并将其打印到其他文件
【发布时间】:2015-09-07 11:31:58
【问题描述】:

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

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

请建议改进​​我的代码。每个 xh 前都有一个“+”号,每个“=”号前后都有一个空格。我需要在其他文件中打印 xh 的每个值。在几行的开头有一个“+”号。提前致谢。

【问题讨论】:

    标签: perl


    【解决方案1】:

    打印$_没有意义,因为它没有在任何地方使用,所以你想检查$1捕获组的内容,

    print $out $1;
    

    【讨论】:

    • 你打败了我。 :)
    • @Сухой27..我点击了这个链接...我尝试运行它,但它显示“语言不能为空白”
    • @Сухой27 .. 它在那里完美工作......但是当我在我的系统上运行时,它在命令提示符和输出文件中都没有显示任何输出......我正在使用 ubantu
    • @Сухой27...此代码运行良好...您可以分享您的邮件 ID,以便我可以将我的实际文件发送到那里...
    【解决方案2】:

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

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

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

    【讨论】:

    • ...我已经尝试过了,它显示了错误...。量词在正则表达式中不遵循任何内容;在 m/+ 中由 Here in m/+ 标记
    • 这就是反斜杠的用途。它转义了元字符。
    【解决方案3】:
    while(<DATA>) {
        chomp;
        print "$1\n" if /xh = (\d+)/
    }
    
    
    __DATA__
    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 
    

    【讨论】:

    • @fugu ...这工作得很好...但是我的实际输入文件很大...我需要匹配的是不同的东西,它不起作用。我需要匹配的行是 +vth0 = 10……vth0 的值在多行中……所以我需要将所有值保存在一个文件中。我已经尝试了很多来匹配这个字符串,但它不起作用......我写的是 /\+vth[0]=(\d+)/...我也尝试了其他组合..之间至少有 4 个空格vth0 和 =,= 和 10 之间有一个空格...你能分享你的邮件 ID 吗?
    • @Suhan 你应该问另一个问题
    【解决方案4】:

    您的正则表达式没问题,但$_ 中没有任何内容。捕获不设置$_,它设置$1$2 等等。

    所以你的代码应该是:

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

    请参阅perlretut 了解更详细的说明。

    【讨论】:

    • @simbabque...没用...同样的问题...代码运行良好,但在输出文件中没有得到任何东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多