У меня есть пакетный файл Windows, который использует sed
для работы с файлами.Манипуляция включает в себя простые замены, такие как
sed -e s/PATTERN/OTHERS/g infile >outfile
sed -e "/^.*COPY_START/,/^.*COPY_END/ d" infile >outfile
. В то время как первый может быть заменен на
Get-Content infile | %{ $_ -replace 'PATTERN', 'OTHERS' } | Set-Content outfile
Я не нашел, как выбрать группу строк, которые будут удаленымаркеры строки COPY_START
и COPY_END
.
Как эти команды sed
можно заменить на PowerShell.
Редактировать: Что касается комментария Джеффа, я пытался пойматьмногострочная проблема с этим кодом:
Get-Content infile -replace '(.*)COPY_START\n.*COPY_END(.*)','$1$2'
Но \n
не удовлетворяет критериям поиска.Чтобы выделить критерий «многострочный», я использовал
Get-Content infile -match 'COPY_START\n.*COPY_END'
с этим файлом
before
do COPY_START
skip
until COPY_END
after
Но совпадение всегда $False
.Я ожидал, что выражение \n.*
должно совпадать с концом строки после COPY_START и всеми строками до появления COPY_END.
Почему не совпадает с регулярным выражением и как его исправить?