Показать полную графическую версию : Выбор скриптового языка
RasKolbas
13-11-2024, 10:49
Потихоньку привык использовать в 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
Всё зависит от обстоятельств и личных предпочтений. Конкретно по заданию: пример входящего файла
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
Для сравнения, прочие решения.
# 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
В 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
Как это делается на PowerShell? »
Можно так:
(sls '(?<=Connection.+:.+:).+$' file.txt).Matches.Value
Foreigner
15-11-2024, 16:46
Если нужно первое вхождение, то:
(sls 'Connection' file.txt).foreach{$_.Line.Split()[2]}
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.