#regex #powershell #replace
#регулярное выражение #powershell #заменить
Вопрос:
ipconfig | Select-String "IPv4 Address"
возвращает что-то вроде этого:
IPv4 Address. . . . . . . . . . . : 192.168.1.50
IPv4 Address. . . . . . . . . . . : 172.20.112.1
IPv4 Address. . . . . . . . . . . : 192.168.208.1
Допустим, я хотел заменить «IPv4-адрес. . . . . . . . . . . :» с пустой строкой, используя -replace . Как бы я это сделал? Вот что я попробовал:
ipconfig | Select-String "IPv4 Address" -replace "IPv4 Address. . .",""
Это дало мне следующую ошибку:
Select-String : A parameter cannot be found that matches parameter name 'replace'.
At line:1 char:41
ipconfig | Select-String "IPv4 Address" -replace "IPv4 Address. . .", ...
~~~~~~~~
CategoryInfo : InvalidArgument: (:) [Select-String], ParameterBindingException
FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectStringCommand
Есть какие-нибудь идеи?
Ответ №1:
Используя only Select-String
, вы можете использовать группу захвата для извлечения IP-адреса:
ipconfig | Select-String "IPv4 Address.*:s*(. )" | ForEach-Object { $_.Matches.Groups[1].Value }
.*:
соответствует всему, вплоть до:
s*
соответствует любому (нулевому или более) пробелу между:
и IP-адресом(. )
сопоставляет IP-адрес (еще один символ) и записывает его в группу 1$_.Matches.Groups[1].Value
выводит значение группы захвата 1, которое является IP-адресом
Эта ссылка дает хороший обзор многих возможностей использования регулярных выражений с PowerShell.
Ответ №2:
Вы можете использовать
ipconfig | Select-String "IPv4 Address" | foreach { $_ -replace '.*:s*' }
С .*:s*
помощью вы сопоставляете весь текст до последнего :
в строке, а s*
также используете любые нулевые или более пробельные символы после двоеточия.
Вот демонстрация регулярных выражений.
Комментарии:
1. Поскольку вы работаете в PowerShell, зачем использовать ipconfig.exe , против
Get-NetIPAddress | Select -Property IPv4Address
или(Get-NetIPAddress).IPv4Address
, тогда скажи это(Get-NetIPAddress).IPv4Address | ForEach {$PSItem -replace $PSitem, ''}
Ответ №3:
Установите Git. Запустите Git Bash
и используйте grep
и sed
(или cut
или awk
):
$ ipconfig | grep 'IPv4 Address' | sed 's/.*: //'
s/xyz/abc/
означает , что вы создаете с. xyz
abc
Комментарии:
1. Да, все фанаты Windows сошли с ума. 😉 Хорошо, я фанат Linux. Но я бы на самом деле сделал это именно так. И это работает, я это проверил. По крайней мере , на немецком компьютере с.
'IPv4-Adresse'