Perl::Найти подстроку и отобразить слово целиком

Resulta que el problema fue causado por un voltaje bajo. Se cambió la fuente de alimentación, se reinició el pi y se solucionó el problema.

-2
01.07.2019, 13:24
2 ответа

Все в порядке, все работает как надо, но вы неправильно поняли, как работают регулярные выражения. .означает «соответствует любому символу», поэтому .V15Mбудет соответствовать DV15в PADV15MA0, поэтому вы получите:

FOUND PADV15MA0 IOP059_VOUT15_OUT (.IO(VOUT15_OUT)
FOUND.V15M(px_IOP059_VOUT15_OUT_V15M) );

Вы хотите что-то вроде:

#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
  chomp;
  @words=split(",",$_);
  foreach my $word(@words){
    if($word =~ /$var/){
      print "FOUND",$word, "\n";
    }
  }   
}

Это вернет:

FOUND.V15M(px_IOP059_VOUT15_OUT_V15M) );

Однако ваш код предполагает, что вам нужны только слова, так что если это так, разделите строку ввода пробелами, а не запятыми (в вашем файле нет запятых):

#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
  chomp;
  @words=split(" ",$_);
  foreach my $word(@words){
    if($word =~ /$var/){
      print "FOUND ",$word, "\n";
    }
  }   
}
1
28.01.2020, 05:16

Вы можете сделать это следующим образом:

$ perl -lsne 'print "FOUND: >>>$1<<<" if /(\Q$pin\E\((?:(?!\))\H)*\))/' -- -pin=".V15M" inp

Результат:

FOUND: >>>.V15M(px_IOP059_VOUT15_OUT_V15M)<<<

Рабочий:

  • Регулярное выражение ищет булавку, за которой следует открывающая скобка и до ближайшей закрывающей скобки.
0
28.01.2020, 05:16

Теги

Похожие вопросы