Suchen und Ersetzen von Abschnitten durch Start- und Endpunkte (neben der Rückgabe der inneren Ziffer)

1

Ich muss einen wirklich alten Code durcharbeiten, der sich wirklich oft wiederholt. Beim Versuch, es zu klären, bin ich auf dieses Problem gestoßen, und zwar aufgrund des monumentalen Ausmaßes von allem.

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

Ich glaube nicht, dass es einen vernünftigen Weg gibt, dies zu tun, aber ich möchte das gesamte A ersetzen und zurücklassen

blah(x)

Wobei x die erste Zahl innerhalb von A ist.

DW
quelle

Antworten:

0

Folgendes Perl-Skript sollte reichen.

#! /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;
  }
}

Zu rennen

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

blaaaaaaaaaa

blah(50)

wo fileInhalte sind

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

Krishna
quelle