Encontrar e substituir porções por pontos inicial e final (ao lado de retornar o numeral interno)

1

Eu tenho que trabalhar com um código muito antigo que se repete com muita frequência. Então, ao tentar esclarecer, eu me deparei com esse problema devido à escala monumental de tudo isso.

<A>
   hello! my inside contents can vary
   5
</A>

Eu não acho que haja uma maneira razoável de fazer isso, mas eu quero substituir a totalidade de A e deixar para trás

blah(x)

Onde x é o primeiro número encontrado dentro de A.

    
por D.W. 14.02.2017 / 11:21

1 resposta

0

Seguir o script perl deve fazer.

#! /usr/bin/env perl
# ------------------------------------------------
# Author:    krishna
# Created:   Sat Sep 22 09:50:06 2018 IST
# USAGE:
#       process.pl
# Description:
# 
# 
# ------------------------------------------------
$num = undef;

# Process the first argument as file and read the lines into $_
while (<>) {
  # remove newline at the end
  chomp;

  # True for all lines between the tag A
  if (/<A>/ ... /<\/A>/) {
    # Only when num is not defined, Capture only first occurance of a number
    $num = $& if not defined $num and /\d+/;
  } else {
    # Print other lines as it is
    printf "$_\n";
  }

  # After processing the tag, print the number and set to undef to capture next occurance
  if (/<\/A>/) {
    printf "blah($num)\n";
    $num = undef;
  }
}

Para executar

0 > perl ./process.pl file
blah(5)

blaaaaaaaaaa

blah(50)

em que file conteúdo é

0 > cat file
<A>
   hello! my inside contents can vary
   5
   505
</A>

blaaaaaaaaaa

<A>
   hello! my inside contents can vary
   50
</A>

HTH

Krishna

    
por 22.09.2018 / 06:26