Как правило, perl
может делать все, что могут делать awk
или grep
, и, если важна кроссплатформенная работа, может помочь хранение всей вашей логики в одной программе (не полагаясь на оболочку).
Что-то подобное может работать для вас:
perl -ne 'if (/tcp/ and /myprocess/) { (split /\s+/)[3] =~ /(\d+)/; print $1 }'
Не проверено, но оно должно быть близко.Этот однострочник ожидает ввода netstat в stdin.
Вы также можете делать все в Perl следующим образом:
#!/usr/bin/env perl
use warnings;
use strict;
open my $netstat, '-|', 'netstat -ap';
while (<$netstat>) {
next unless /tcp/ and /myprocess/;
my @fields = split /\s+/;
if ($fields[3] =~ /(\d+)/) { print "$1\n" }
}