Как и в других ответах, опубликованных ранее,можно перевести запущенный процесс в использование screen
задним числом благодаря reptyr , а затем закрыть терминал. Шаги описаны в этом посте . Шаги, которые нужно предпринять:
bg
disown
процесс screen
сеанс reptyr
, чтобы взять на себя управление процессом Поскольку ваш последний вопрос задавался о Perl-решениях, вот одно довольно простое, за исключением рекурсивного регулярного выражения, необходимого для сопоставления вложенных {...}
блоков, которые я выделил в переменную $balanced
. Это также позволяет использовать его 3 раза, по одному разу для соответствия блоку после каждого из ключевых слов network vlan
, interfaces
и MTU
.
#!/usr/bin/perl
use strict;
open(F,"datafile") or die;
my $data = join("",<F>);
my $balanced = qr/
( ( [^{}]*+
({ (?-2)* })?
)*
)/x;
while($data =~ m/network\s+vlan\s+([^ {]+)\s*{$balanced}/g){
my $vlan = $1;
my $body = $2;
$body =~ m/description\s*("[^\"]*")/;
my $desc = $1;
$body =~ m/interfaces\s*{$balanced}/;
my $intf = $1;
$intf =~ s/\s+/ /g;
my $mtu = 'none';
$mtu = $1 if($body =~ m/MTU\s*{$balanced}/);
$mtu =~ s/\s+/ /g;
print "$vlan, $desc,$intf,$mtu\n";
}
$balanced
используется после того, как вы сопоставили открытие {
блока, и продолжает сопоставлять все, что не является {
или }
, используя [^{}]*
.За ним необязательно следует {
, рекурсия, идущая назад на 2 скобки, и }
, а именно {(?-2)*}
. Это внутри ()?
, чтобы сделать его необязательным. Я не специалист по Perl, поэтому, несомненно, есть более оптимальная версия этого.