Удалить определенный текст из файла с помощью PowerShell

Мне нужно удалить/заменить определенный текст, который написан в нескольких строках и имеет пустые строки между строками текста.

Например:

some text

text 1

other text

text 1

Мне нужно удалить:

other text

text 1

Результат будет:

some text

text 1

Сейчас у меня есть это: (Get-Content file.txt) -notmatch "other textrntext 1" | Out-File file.txt


person ARB    schedule 13.03.2019    source источник
comment
Возможный дубликат: stackoverflow.com/questions/24326207/   -  person Peter Schneider    schedule 13.03.2019
comment
Это другое. Мне нужно удалить раздел с пустыми строками.   -  person ARB    schedule 13.03.2019
comment
Вы пропустили, чтобы показать код, который у вас есть до сих пор. Вы можете прочитать следующую справку Как задать хороший вопрос? и Как создать минимальный, полный и проверяемый пример.   -  person Olaf    schedule 13.03.2019
comment
Пример должен помочь вам начать работу... используйте командлет get-content с параметром -raw, затем вы можете использовать \r\n внутри параметра -pattern строки select для соответствия новой строке. Как заявил Олаф, вы должны предоставить некоторый код.   -  person Peter Schneider    schedule 13.03.2019
comment
Прямо сейчас у меня есть это: (Get-Content file.txt) -notmatch other textrntext 1 | Файл Out-File.txt . Это не так работает, что-то не так с тем, как я использую rn.   -  person ARB    schedule 13.03.2019
comment
Пожалуйста, отредактируйте свой вопрос и поместите туда код, который вы попробовали, в удобном формате. Никогда не помещайте свой код в комментарий.   -  person Theo    schedule 13.03.2019


Ответы (1)


Есть несколько подходов к этому.

Захват первых трех строк текстового файла:

(Get-Content File.txt)[0..2]

Выбор строки, которую вы хотите вывести:

((Get-Content File.txt -raw) | Select-String -pattern "(?s)some text.*?text 1").matches.value

Определение номеров неверных строк и последующее их исключение:

$File = Get-Content File.txt
$FirstBadLine = $File.IndexOf("other text")
$LastBadLine = ($file | select -skip $firstbadline).IndexOf("text 1")+$firstbadline
$file[0..($firstbadline-1)],$file[($lastbadline+1)..$file.count]

Определить первую ошибочную строку и пропустить известное количество строк оттуда:

$File = Get-Content File.txt
$NumberOfBadLines = 5
$FirstBadLine = $File.IndexOf("other text")
$file[0..($firstbadline-1)+($firstbadline+$NumberOfBadLines)..$file.count] | Set-Content File.txt
person AdminOfThings    schedule 13.03.2019
comment
Я попытался привести более простой пример. У меня есть один файл с большим количеством строк, и мне нужно удалить раздел с 5 строками (3 строки с текстом и 2 пустые строки между ними). Я не знаю номер, на котором находятся линии. - person ARB; 13.03.2019
comment
Я думаю, что мой последний пример может делать то, что вы хотите. - person AdminOfThings; 13.03.2019
comment
Ваш последний пример спас меня. Я знал третью строку и пятую, искал третью строку и сделал $firstBadLine-2. Благодарю вас ! - person ARB; 13.03.2019