Значение фильтра Powershell на основе Select-String - PullRequest
0 голосов
/ 01 августа 2020

Я новичок в сценарии Powershell. Я использую команду vmstat и пытаюсь фильтровать значения на основе общего объема памяти и используемой памяти.

Я сделал это, но не могу просто отфильтровать значение.

PS / home / ec2-user> $ usedmem = vmstat -s | Select-String 'used memory'

PS / home / ec2-user> $ usedmem

   217976 K used memory

Но мой вопрос:

как я могу просто получить значение (217976) за использованную память

Спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 01 августа 2020

Подход с использованием захвата шаблона Regex :

$usedMemLine = vmstat -s | Select-String "(.+) . used memory"
$usedValue = $usedMemLine.Matches[0].Groups[1].Value
1 голос
/ 01 августа 2020

Вот один способ. Разделите его на пробел и выберите первый результирующий элемент массива.

(-split $usedmem)[0]

217976
0 голосов
/ 01 августа 2020

Лучший подход RegEx:

if($usedMem -match "^\s*(\d+).*"){$matches[1]}

Объяснение:

^ Match characters at the beggining of string
\s Match a White space
* Match 0 or more instances of previous character
( Start grouping of specific match
\d Match a 0-9 digit
+ Match 1 or more instances of previous character
) End grouping of specific match
. Match any character
* Match 0 or more instances of previous character

$matches[1] возвращает только значение K, а $matches[0] возвращает всю строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...