PowerShell для удаления текста после специального символа в списке URL - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь отфильтровать список URL-адресов, где некоторые URL-адреса имеют символ " / " после имени домена (.com или .pl ..etc).Я пытаюсь написать сценарий PowerShell для удаления любого текста после " / " из URL.

Пробовал ниже сценарии, но не сработало.

(Get-Content "C:\Work\url123.txt" -Raw) -replace "/" | Set-Content "C:\Work\url12.txt"

// это удаляет символ "/" и объединяет URL

Ввод

www.xyz.com

www.abc.com/dummypage/login

www.123.com/login.php?

Ожидаемый вывод

www.xyz.com

www.abc.com

www.123.com

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Вы можете использовать следующее, если ваши URL не содержат протоколов.

(Get-Content "C:\Work\url123.txt") -Replace "(.*?)/.*",'$1'

Если в ваших списках предполагается наличие протоколов (URI и URL), то будет работать следующее:

(Get-Content "C:\Work\url123.txt") -Replace ".*//|(.*?)/.*",'$1'

Поскольку оператор -Replace использует Regex, я объясню синтаксис.

  • .*//: сопоставляет все символы, включая две косые черты, включая 101.
  • |: альтернативный символ (ИЛИ)
  • (.*?): сопоставить как можно меньше символов (сопоставление с отложенным совпадением) и сохранить в качестве группы захвата 1 ($1).
  • /: буквально соответствует прямому слешу
  • $1: группа захвата 1.
1 голос
/ 20 мая 2019

Вы можете использовать split :

$a = "ffff/666666/iiii"
$b = $a.Split('/') #is an array with all the substrings separated by /
$b[0] # is the first element 

результат: 'ffff'

одна строка: $b = $a.Split('/')[0]

поэтому код должен выглядеть так:

(Get-Content "C:\Work\url123.txt" -Raw) | $_.split('/')[0] | Set-Content "C:\Work\url12.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...