Поиск и замена частей по начальной и конечной точкам (наряду с возвращением внутренней цифры)
Я должен проработать какой-то действительно старый код, который повторяется очень часто. Таким образом, пытаясь прояснить это, я столкнулся с этой проблемой из-за монументального масштаба всего этого.
<A>
hello! my inside contents can vary
5
</A>
Я не думаю, что есть какой-то разумный способ сделать это, но я хочу заменить всю А и оставить позади
blah(x)
Где х - это первое число, найденное внутри А.
1 ответ
Следующий скрипт 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>
НТН
Кришна