Powershell удалить пустые строки в файле

Обновлено: 02.07.2024

Краткое содержание: Эд Уилсон, специалист по сценариям Microsoft, учит, как избежать пустых строк в конце файла с помощью Windows PowerShell.

Эй, сценарист! У меня проблема с моим скриптом. Например, в моем сценарии я создаю переменную. Затем, когда я записываю переменную в файл, я всегда получаю дополнительную пустую строку в конце текстового файла. Хотя во многих случаях это не проблема, иногда это очень раздражает. Это время, когда я создаю файл, который будет использоваться для управления другим скриптом. Например, если у меня есть сценарий, который собирает имена компьютеров, к которым мне нужно подключиться, а затем я записываю эти имена компьютеров в текстовый файл, чтобы использовать его с другими сценариями, я всегда получаю пустую строку. в конце файла. Это приводит к тому, что последующие сценарии всегда не могут подключиться к пустой строке, и поэтому это вызывает ошибки. До сих пор я справлялся с этой проблемой, выполняя небольшую проверку ошибок, но это громоздко, и было бы проще избежать проблемы вообще. Вы волшебник, когда дело доходит до такого рода вещей, поэтому я знаю, что вы сможете решить проблему с помощью чего-то элегантного. Я остаюсь вашим самым большим поклонником,

Здравствуйте, Джейн,

Эд Уилсон, сценарист Microsoft, здесь. Вау, ты мой самый большой поклонник! Действительно? Я имею в виду, как президент официального фан-клуба сценаристов? Прохладный! (Примечание. Одним из преимуществ членства в официальном фан-клубе Scripting Guys является то, что вам не нужно носить круглые ушные шапки, похожие на мышиные. Конечно, нет ничего плохого в том, чтобы носить круглые ушные шапки, похожие на мышиные.)

JN, ваша проблема в том, что вы получаете лишнюю пустую строку внизу вашего текстового файла или в конце вашей переменной. Эта проблема показана в следующем коде?

для ($i = 0; $i -le 4; $i++)

$count > c:\fso\count.txt ; c:\fso\count.txt

При запуске предыдущего сценария текстовый файл содержит дополнительную строку в конце файла. Это показано на следующем рисунке.

Изображение текстового файла с дополнительной пустой строкой в ​​конце файла

для ($i = 0; $i -le 4; $i++)

Текстовый файл, созданный с помощью предыдущего кода, показан на следующем рисунке.

Изображение текстового файла без лишних пустых строк

Двойное двоеточие указывает, что я вызываю статический метод (тот, который всегда доступен и не требует экземпляра класса для работы). Первый параметр — это путь к файлу, который я хочу создать. Путь c:\fso\io.txt относится к папке (c:\fso) на моем локальном компьютере. Содержимое скрипта хранится в переменной $count, и это текст, который я записываю в файл.

Второй способ использования статического метода WriteAllText из файлового класса в пространстве имен System.IO — указать путь, содержимое и кодировку для вызова метода. На следующем рисунке показаны выходные данные командлета Get-Member.

Изображение вывода командлета Get-Member

PS C:\Users\edwils> [system.text.encoding] | свойство get-member -Static -MemberType

Имя определения типа члена

Статическое свойство ASCII System.Text.Encoding ASCII

Статическое свойство BigEndianUnicode System.Text.Encoding BigEndianUnicode

Статическое свойство по умолчанию System.Text.Encoding Default

Статическое свойство Unicode System.Text.Encoding Unicode

Статическое свойство UTF32 System.Text.Encoding UTF32

Статическое свойство UTF7 System.Text.Encoding UTF7

Статическое свойство UTF8 System.Text.Encoding UTF8

для ($i = 0; $i -le 4; $i++)

При добавлении третьего параметра изменяется последняя строка.

Ну, JN, все дело в записи в текстовый файл и обеспечении того, чтобы выходной файл не содержал никаких дополнительных пробелов или пустых строк в конце файла. Присоединяйтесь ко мне завтра, чтобы узнать больше о возможностях Windows PowerShell.

Здравствуйте!
Я пытаюсь написать сценарий для использования на моем компьютере с Server 2016, чтобы фиксировать разрешение экрана моего пользователя, который входит в систему через удаленный рабочий стол (я настрою этот сценарий для запуска при каждом входе в систему). ). Приведенный ниже код работает, за исключением того, что он добавляет в текстовый файл пустые строки (вместе с информацией). Когда я запускаю скрипт для первого (который создает текстовый файл), шаблон кажется пустой строкой
данные
пустая строка
пустая строка
пустая строка

Второй запуск добавляет первую пустую строку, он просто начинается с данных, но добавляет 3 пустые строки под данными. Вот код:

Популярные темы в PowerShell

JitenSh

Этот человек является проверенным специалистом

ДжитэнШ

  • отметить 473 лучших ответа
  • thumb_up: 738 благодарных отзывов

Таблица форматов должна быть проблемой

что, если вы запустите это или export-csv?

2 ответа

JitenSh

Этот человек является проверенным специалистом

ДжитэнШ

  • отметить 473 лучших ответа
  • thumb_up: 738 благодарных отзывов

Таблица форматов должна быть проблемой

что, если вы запустите это или export-csv?

Экспорт-csv указал мне правильное направление. СПАСИБО!

Эта тема заблокирована администратором и больше не открыта для комментариев.

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

Связывание домена Windows и домена веб-сайта?

Что может вызвать мерцание экрана?

У меня есть настольный компьютер Dell OptiPlex, который вызывает проблему мерцания экрана. Пожалуйста, проверьте это изображение ниже: Я сделал следующее, но все же мне повезло: Заменил монитор и кабели. Обновлен BIOS. Переустановил драйвер дисплея. Заменил оперативную память. р>

Искра! Серия Pro – 21 марта 2022 г.

Здравствуйте, ребята, я должен запустить эту Искру! с извинением. Я не устанавливал напоминания для этой статьи и, следовательно, забыл подготовить ее на выходных. Просто для этой цели сегодня было что-то вроде безумия в t.

Щелкни! Обновление Linux, Паролей больше нет?, Атаки BitB, Juno Pictures, Новый лед

Ваша ежедневная доза технических новостей. Вы должны это услышать. Появляется Linux 5.17: Вот что внутри Торвальдс и его команда снова обновили ядро ​​​​Linux, после некоторых трудных времен из-за некоторых изменений, внесенных в последнюю минуту. Работа начинается на n.

Удобные наушники для работы из дома — чтобы слышать шум, но не передавать его

Поскольку все больше и больше людей работают из дома, требования к функциям гарнитур немного изменились. Теперь многим людям не нужны гарнитуры, которые полностью изолируют их от окружающей среды, потому что рядом с ними может находиться ребенок, которому нужно быть собой.

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

Мой файл Input.txt содержит следующее:

Эта строка пуста
Строка 1
Строка 2
Эта строка пуста
Строка 3

Мой Output.txt содержит следующее:

Эта строка пуста
Строка1
Строка2
Строка3

Как удалить первую пустую строку?

Intel vPro®: что нового в 2022 году

2022-03-24 16:00:00 UTC Video Meetup Видеовстреча: Intel - Intel vPro®: что нового в 2022 г. Подробнее о событии Просмотреть все события

Этот человек является проверенным специалистом

Мартин9700

Проще использовать командлет Where-Object:

Что переводится как "Где строка равна чему-то", пустые строки будут просто отфильтрованы.

2 ответа

Этот человек является проверенным специалистом

Мартин9700

Проще использовать командлет Where-Object:

Что переводится как "Где строка равна чему-то", пустые строки будут просто отфильтрованы.

Aron_Williamson

Этот человек является проверенным специалистом

Арон_Уильямсон

Как и выше, чтобы получить вывод, просто выведите результат строки Мартина в новый или тот же текстовый файл:

Создан новый файл

Тот же текстовый файл изменен

Эта тема заблокирована администратором и больше не открыта для комментариев.

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

Связывание домена Windows и домена веб-сайта?

Что может вызвать мерцание экрана?

У меня есть настольный компьютер Dell OptiPlex, который вызывает проблему мерцания экрана. Пожалуйста, проверьте это изображение ниже: Я сделал следующее, но все же мне повезло: Заменил монитор и кабели. Обновлен BIOS. Переустановил драйвер дисплея. Заменил оперативную память. р>

Искра! Серия Pro – 21 марта 2022 г.

Здравствуйте, ребята, я должен запустить эту Искру! с извинением. Я не устанавливал напоминания для этой статьи и, следовательно, забыл подготовить ее на выходных. Просто для этой цели сегодня было что-то вроде безумия в t.

Щелкни! Обновление Linux, Паролей больше нет?, Атаки BitB, Juno Pictures, Новый лед

Ваша ежедневная доза технических новостей. Вы должны это услышать. Появляется Linux 5.17: Вот что внутри Торвальдс и его команда снова обновили ядро ​​​​Linux, после некоторых трудных времен из-за некоторых изменений, внесенных в последнюю минуту. Работа начинается на n.

Удобные наушники для работы из дома — чтобы слышать шум, но не передавать его

Поскольку все больше и больше людей работают из дома, требования к функциям гарнитур немного изменились. Теперь многим людям не нужны гарнитуры, которые полностью изолируют их от окружающей среды, потому что рядом с ними может находиться ребенок, которому нужно быть собой.

Снимок экрана с параметрами удаления пустых строк в текстовом редакторе UltraEdit

Эти параметры работают следующим образом:

Удалить все пустые строки

Это удалит все строки в файле, которые не содержат символов или пробелов. Если выделен текст, операция ограничивается только выделенным текстом.

Удалить все пустые строки и строки, содержащие только пробелы

Это удалит все строки в файле, которые не содержат символов, отличных от пробелов. Это означает, что строки, не содержащие буквально ничего, удаляются так же, как строки, содержащие только пробелы и/или знаки табуляции. Опять же, если выделен текст, эта операция ограничивается только выделенным текстом.

Но у меня нет этой версии (или я просто люблю все усложнять). Как мне удалить все пустые строки?

Что найти: "^(?:[\t ]*(?:\r?\n|\r))+" (без кавычек)
Заменить на: "" (без кавычек - то есть ничего).


Примечание. Нажмите Заменить все один раз, чтобы заменить все (даже последовательные) пустые строки в текстовом файле.

Я использую еще более старую версию, которая не поддерживает регулярные выражения Perl. у вас есть решение для меня?

Мы упоминали, что вам следует действительно подумать об обновлении? В любом случае, если вы используете предыдущую версию UltraEdit, которая не поддерживает регулярные выражения Perl, для удаления пустых строк вы можете использовать замену регулярного выражения следующим образом. Вам нужно будет проверить параметр «Регулярные выражения» в диалоговом окне «Заменить».

Найти что: "%[^t ]++[^r^n]+" (без кавычек)
Заменить на: "" (без кавычек - т.е. ничего).


Возможно, вам придется нажать Заменить все несколько раз, чтобы убедиться, что все пустые строки удалены. Из-за того, как работает старый синтаксис регулярных выражений, замена может не заменять все последовательные пустые строки в текстовом файле.

Читайте также: