Добавить регулярное выражение в строки в текстовом файле, если его еще нет - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь добавить регулярное выражение в начало каждой строки в текстовом файле, если его еще нет.Входные данные представляют собой список URL-адресов, а регулярное выражение - список протоколов.

Я пробовал разные циклы if / else и командлеты, такие как add-content / set-content, чтобы добавить регулярное выражение, но логика каждый раз отключается.В настоящее время у меня есть:

$content = Get-Content "C:\path\to\file\test.txt"
$pattern = "[regex]::^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)" 
ForEach-Object { 
    if ($content -match $pattern) 
        {$content}
    else {
        {foreach($_ in $content) {"^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)" + $_ }}
          }
 } | Out-File "C:\path\to\file\test.txt"

Я бы хотел, чтобы вывод был

^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)netflix.com
^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)google.com
^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)yahoo.com

, но фактический вывод -

"^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)" + $_

1 Ответ

0 голосов
/ 02 апреля 2019

Я думаю, что получил это, но мне пришлось угадать некоторые вещи на входе.

Это то, что я использовал для ввода

google.com
yahoo.com
netflix.com

Это модифицированный PowerShell, который я использовал,Если строка во входных данных не совпадает с шаблоном в начале строки, она заменит текущую строку текстом замены, включая шаблон.Затем он ищет индекс исходной строки во входных данных и заменяет ее.Наконец он записывает все обратно в исходный файл.

$content = Get-Content "C:\path\to\file\test.txt"
$pattern = "^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)" 

$content | ForEach-Object { 
    if ($_ -notlike $pattern +"*") {
        #Write-Host "^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)" + $_ 
        $replaceText = $_ -replace "^$_$", "$pattern$_"  
        $content[($content.IndexOf("$($content -like "$_")"))] = $replaceText
    }
}

$content | Set-Content "C:\path\to\file\test.txt"

Вывод файла обновления:

^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)google.com
^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)yahoo.com
^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|tcp:\/\/|ssl:\/\/)netflix.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...