2017-08-10 70 views
0

早上好!我正在学习perl。耶,学习!Perl,递归查找并从文本文件中的列表中替换?

我有〜650个.xml文件。我有~400对字符串来查找和替换这些.xml文件。字符串当前位于制表符分隔的文本文件中。我需要替换左边的7个字符,每个对都用图拉等等。

FCN.D75 Figure 0001. Air Compressor 
FCN.D90 Figure 0002. Air Compressor Cooling Lines 
FCN.D84 Figure 0003. Air Compressor Supply Lines 

我看到的是如何找到并从列表中的文件替换,以及如何找到并通过目录递归取代,但不是魔术组合几种解决方案几种解决方案。

在此先感谢您提供的任何帮助。

+5

你尝试过什么?你有什么问题?请告诉我们你的代码。如果你没有任何代码,那么Stack Overflow不是问你问题的最佳地方。 –

回答

0

喜欢的东西(你需要安装文件:: Slurper或自行模仿其潜艇):

#!/usr/bin/env perl 

use File::Find qw(find); 
use File::Slurper qw(read_lines read_text write_text); 

my %phrases = map { 
    split m/\s/, $_, 2 
} read_lines('phrases_list.txt'); 

find(
    { 
     no_chdir => 1, 
     wanted => sub { 
      my $file_path = $File::Find::name; 
      next if $file_path !~ m/\.xml$/; 
      next unless -f $file_path; 

      my $text = read_text($file_path); 
      $text =~ s/\Q$_\E/$phrases{$_}/ge for keys %phrases; 
      write_text($file_path, $text); 
     }, 
    }, 
    '.' 
); 
+0

@丹,如果这有帮助,请按下答案旁边的复选标记将其标记为已接受。谢谢! –