powershell: удалить указанную c строку от х до х - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в powershell и совершенно не понимаю ...

Просто хочу удалить строки с 7 по 2500 из текстового файла. Первые 6 строк должны быть нетронутыми. С linux bash все так просто, просто: sed -i '7,2500d' $file

Не нашли решения для могущественного PowerShell: - (

Спасибо.

Ответы [ 3 ]

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

Используйте Get-Content, чтобы прочитать содержимое файла в переменную. Переменная может быть проиндексирована как обычный массив PowerShell. Получите нужные вам части массива, затем передайте переменную в Set-Content для обратной записи в файл.

$file = Get-Content test.log

$keep = $file[0..1] + $file[7..($file.Count - 1)]

$keep | Set-Content test.log

Используя это как содержимое файла test.log:

One
Two
Three
Four
Five
Six
Seven
Eight
Nine

Этот скрипт выведет следующее в test.log (перезаписывая содержимое):

One
Two
Eight
Nine

В вашем случае вы захотите использовать $file[0..5] + $file[2500..($file.Count - 1)].

0 голосов
/ 27 апреля 2020

Select-object -index принимает массив, поэтому:

1..10 > file

(get-content file) | select -index (0..5) | set-content file
get-content file

1
2
3
4
5
6

Или:

(cat file)[0..5] | set-content file
0 голосов
/ 27 апреля 2020

Чтобы удалить серию строк в текстовом файле, вы можете сделать что-то вроде этого:

$fileIn  = 'D:\Test\File1.txt'
$fileOut = 'D:\Test\File2.txt'

$startRemove = 7
$endRemove   = 2500
$currentLine = 1

# needs .NET 4
$newText = foreach ($line in [System.IO.File]::ReadLines($fileIn)) {
    if ($currentLine -lt $startRemove -or $currentLine -gt $endRemove) { $line}
    $currentLine++
}
$newText | Set-Content -Path $fileOut -Force

Или, если ваша версия. NET ниже 4.0

$reader = [System.IO.File]::OpenText($fileIn)
$newText = while($null -ne ($line = $reader.ReadLine())) {
    if ($currentLine -lt $startRemove -or $currentLine -gt $endRemove) { $line }
    $currentLine++
}
$reader.Dispose()
$newText | Set-Content -Path $fileOut -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...