Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Выбор скриптового языка (http://forum.oszone.net/showthread.php?t=355868)

RasKolbas 13-11-2024 10:49 3032816

Выбор скриптового языка
 
Потихоньку привык использовать в Windows сборники GNU-утилит для Windows: Cygwin и MinGW (MinGW нравится больше), можно использовать bash-скрипты как в линуксе.
Вопрос, если вам нужен в Windows скрипт по работе с текстом (допустим прочитать лог 'C:\Program Files\OpenVPN\log\openvpn.log', найти в нём строки содержащие слово "received" и вывести только IP-адреса содержащие с этих строках), то что вы используете:
1. установлю MinGW и использую bash-скрипт
2. напишу скрипт с использованием командлетов PowerShell
3. использую другой скриптовый язык

SQLai Lama 13-11-2024 19:21 3032844

Всё зависит от обстоятельств и личных предпочтений. Конкретно по заданию: пример входящего файла
Код:

received from "88.83.177.54" blah-blah-blah
dummy string
not received from 127.0.0.1

Пример решения на PowerShell:
Код:

(sls received openvpn.txt).line -split '[\s''"]').where{$_ -as [ipaddress]}

SQLai Lama 14-11-2024 07:57 3032858

Для сравнения, прочие решения.
Код:

# perl
perl -nle "print $1 if /received/ and /(\b\d{1,3}(?:\.\d{1,3}){3}\b)/" openvpn.txt

# grep
grep 'received' openvpn.txt | grep -oP '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'

# ruby
ruby -ne "puts $_.scan(/\b\d{1,3}(?:\.\d{1,3}){3}\b/) if /received/" openvpn.txt


RasKolbas 15-11-2024 12:00 3032898

В MinGW есть и grep, и bash, и sed, и awk, и все GNU-утилиты, привычные каждому линуксоиду, но уже в Windows.
В условии было вывести только IP-адреса, то есть если в логе записано:
Код:

2024-11-15 08:48:09 88.83.177.54:51414 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 2048 bit RSA, signature: RSA-SHA256
2024-11-15 08:48:09 88.83.177.54:51414 [Guest3 ] Peer Connection Initiated with [AF_INET6]::ffff:88.83.177.54:51414
2024-11-15 08:48:09 Guest3 /88.83.177.54:51414 MULTI_sva: pool returned IPv4=10.8.0.66, IPv6=(Not enabled)
2024-11-15 08:48:09 Guest3 /88.83.177.54:51414 MULTI: Learn: 10.8.0.66 -> Guest3 /88.83.177.54:51414

то я могу сделать так:
Код:

# cat /c/Program\ Files/OpenVPN/log/openvpn.log | awk '$0~"Peer Connection Initiated" {print $3}'
93.80.41.46:51414

Как это делается на PowerShell?

Foreigner 15-11-2024 12:42 3032900

Цитата:

Цитата RasKolbas
Как это делается на PowerShell? »

Можно так:

Код:

(sls '(?<=Connection.+:.+:).+$' file.txt).Matches.Value

Foreigner 15-11-2024 16:46 3032923

Если нужно первое вхождение, то:

Код:

(sls 'Connection' file.txt).foreach{$_.Line.Split()[2]}


Время: 11:06.

Время: 11:06.
© OSzone.net 2001-