Сожмите пустые строки, используя powershell - PullRequest
0 голосов
/ 27 сентября 2019

Как я могу сжать пустые несколько пустых строк, чтобы

AAA
AAA
AAA

BBB
BBB


CCC

в

AAA
AAA
AAA

BBB
BBB

CCC

, используя powershell.

Сценарий

(gc test.tex).Trim() | Where-Object{$_ -notmatch "^\s*$"}

сжимает каждую пустую строку, а это не то, что я хочу.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Считать файл как одну строку, обрезать начальные / конечные пробелы, затем свернуть 2 или более последовательных перехода на новую строку, заменив их ровно на 2 строки.

(Get-Content test.txt -Raw).Trim() -replace '(\r?\n){2,}', '$1$1'

Параметр -Raw введен в PowerShellv3.Если вы используете более старую версию, вы можете эмулировать поведение, передавая вывод через Out-String:

(Get-Content test.txt | Out-String).Trim() -replace '(\r?\n){2,}', '$1$1'
1 голос
/ 27 сентября 2019

Вы можете использовать выражение объединения:

@((Get-Content -Path test.tex).Trim()) -notmatch '^\s*$' -join "`n`n"

Это отфильтровывает все пустые строки, а затем объединяет их с символами новой строки.Когда операторы применяются к коллекциям, они неявно действуют как фильтры (в этом примере устраняется необходимость в Where-Object).


Для случая сопоставления вещей в их группах:

(Get-Content -Path test.tex -Raw) -replace '(?m)^\s*$'

Используется многострочный флаг для захвата этих символов новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...