1

Я должен проработать какой-то действительно старый код, который повторяется очень часто. Таким образом, пытаясь прояснить это, я столкнулся с этой проблемой из-за монументального масштаба всего этого.

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

Я не думаю, что есть какой-то разумный способ сделать это, но я хочу заменить всю А и оставить позади

blah(x)

Где х - это первое число, найденное внутри А.

1 ответ1

0

Следующий скрипт perl должен сделать.

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

Бежать

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

blaaaaaaaaaa

blah(50)

где содержимое file

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

blaaaaaaaaaa

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

НТН

Кришна

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .