замена текста в Powershell при каждом альтернативном совпадении - PullRequest
0 голосов
/ 28 апреля 2020

Я посмотрел на этот вопрос , и он близок к тому, что мне нужно сделать, но текст, который мне нужно заменить, противоречив.

Мне нужно заменить "`r`n на ", но только первая из 2 смежных строк

пример: (полный файл имеет длину 50 000 строк и ширину до 500 символов)

    ID,Name,LinkedRecords
    54429,Abe,
    54247,Jonathan,"
    63460|63461"
    54249,Teresa,
    54418,Cody,
    58046,Joseph,
    58243,David,
    ,Barry,"
    74330"
    C8876,Simon,
    X_10934,David,

должно стать

    ID,Name,LinkedRecords
    54429,Abe,
    54247,Jonathan,"63460|63461"
    54249,Teresa,
    54418,Cody,
    58046,Joseph,
    58243,David,
    ,Barry,"74330"
    C8876,Simon,
    X_10934,David,

Я вижу, этот , вероятно, будет полезен, но мне трудно заставить команду работать так, как нужно

1 Ответ

1 голос
/ 28 апреля 2020

Если символы `r`n являются буквальными, то вы можете сделать следующее:

[System.IO.File]::ReadAllText('c:\path\file.txt') -replace '(?<=,")`r`n\r?\n' |
    Set-Content c:\path\file.txt

Если `r`n - это действительные символы возврата каретки и перевода строки, то вы можете сделать следующее:

[System.IO.File]::ReadAllText('c:\path\file.txt') -replace '(?<=,")\r\n' | 
    Set-Content c:\path\file.txt

Обратите внимание, что если память становится проблемой, может потребоваться другой подход.

...