Perl

如何匹配單個模式並將其替換為perl中的多個模式

  • January 13, 2019

我有一個包含以下資訊的文件 - 輸入 -

a[1]= something_data_1;
a[2]= something_data_2;
a[3]= something_data_3;

所以我想用不同的模式替換那個“a”,如下所示,這裡的 diff* 是一個我想替換的字元串。

輸出 -

diff1 [1]= something_data_1;
diff2 [1]= something_data_1;
diff3 [1]= something_data_1;

diff1 [2]= something_data_2;
diff2 [2]= something_data_2;
diff3 [2]= something_data_2;

…..

我試過了:

/usr/bin/perl -w

open(FH,'<',$file_name);
foreach(<FH>)
 {
   if(/a(\[.*)/)
   {
     $_= "diff1$1 ". "diff2$1";
   }
 }

在嘗試了這個之後,我得到了這樣的輸出,

差異

$$ 1 $$= diff2 something_data; 我不明白該怎麼做

你可能想要類似的東西

chomp(my $line = $_);
if ($line eq "a") {
   $_ = "diff1\ndiff2\ndiff3\n";
}

我假設你還沒有chomp編輯,所以$_仍然是換行符的第三個。您需要擷取“a”之後的文本,以便您可以重複使用它:

if (/^(\s*)a(\[.*)/) {
   $_ = "${1}diff1$2".
        "${1}diff2$2".
        "${1}diff3$2;
}

引用自:https://unix.stackexchange.com/questions/494132