Как установить sed на компьютер

Обновлено: 02.07.2024

Закрыто. Этот вопрос не соответствует правилам переполнения стека. В настоящее время ответы не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Stack Overflow.

Закрыт 7 лет назад.

Я хочу программно редактировать содержимое файла с помощью командной строки Windows (cmd.exe). В *nix для этих задач есть sed. Есть ли какой-нибудь полезный нативный эквивалент в Windows?

Что вы подразумеваете под "родным" . Устанавливается для работы в cmd.exe или для работы вообще без установки? Если первое, см. GnuWin32 ref'd ниже; если последнее, то нет. Нет предустановленного родного sed для Windows.

16 ответов 16

Сегодня меня спас powershell.

Для grep есть:

и для sed есть:

Подробнее о функции замены PowerShell см. в этой статье Microsoft.

Кроме того: если вы хотите вызвать его из обычного cmd, просто @powershell -Command "get-content". Единственное предостережение заключается в том, что вы должны избегать кавычек: . -Команда "get-content . \"expression\". "

@Tarc AFAIR, вы можете использовать одинарные кавычки в своей команде и вместо этого использовать двойные кавычки, чтобы заключать команду в кавычки

Сегодня я попробовал это сделать с файлом, чтобы удалить кое-что между кавычками в определенных местах, но обнаружил, что на выходе получается файл почти в два раза больше исходного. Причина, по-видимому, заключалась в том, что этот метод изменил способ обработки новых строк в файле, чтобы использовать «\r\n» вместо «\n».

Удвоение из-за \r\n будет означать, что ваш файл состоит исключительно из символов новой строки. Вот настоящая причина: кодировка.

sed (и ему подобные) содержатся в нескольких пакетах команд Unix.

    работает, но гигантский. намного стройнее. — еще один работающий порт.
  • Другой альтернативой является система UWIN компании AT&T Research. от MinGw - еще один вариант. является наиболее «родной» опцией, но по умолчанию не устанавливается в Windows; тем не менее, он имеет sed , grep и т. д. из коробки. предлагает последние версии 4.3 и 4.4, которые поддерживают параметр -z в отличие от перечисленных верхних портов

Если вы не хотите ничего устанавливать и ваша система не Windows Server, вы можете использовать для этого язык сценариев (например, VBScript). Ниже грубый, импровизированный удар по нему. Ваша командная строка будет выглядеть как

где oldpat и newpat — шаблоны регулярных выражений Microsoft vbscript. Очевидно, я только реализовал команду replace и сделал некоторые предположения, но вы могли бы конкретизировать ее, чтобы быть умнее и лучше понимать командную строку sed.

Это не совсем то, чего я хочу, однако я считаю, что зависимость от VBS является самым простым решением.

GnuWin32 является нативным решением, если под "нативным" вы подразумеваете предназначенное для работы в "обычной" среде Windows (в отличие от CygWin). Попробуйте их, и вы начнете ожидать, что они будут в КАЖДОЙ системе Windows, которую вы используете. .

Похожая утилита поиска и замены регулярных выражений может быть выполнена с помощью JScript. Преимущество JScript по сравнению с VBScript заключается в том, что его можно легко комбинировать с пакетной операцией в одном сценарии, что упрощает использование утилиты в контексте пакетной обработки или командной строки. Доступна надежная гибридная утилита JScript/batch под названием REPL.BAT. Он имеет множество параметров командной строки. Полная документация встроена в сценарий. У него, конечно, нет полной возможности SED, но даже в этом случае он довольно мощный.

UnxUtils предоставляет sed для Win32, как и GNUWin32.

Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить скрипт в какое-то решение/программу/и т. д., которое будет запускаться на других машинах), вы можете попробовать создать скрипт vbs (скажем, replace. ВБС):

И вы запускаете его так:

Это похоже на версию sed, предоставляемую "bill weaver", но я думаю, что эта версия более удобна с точки зрения специальных (' >

Это поведение

Все работает отлично. Примечание: круглые скобки в "get-content" гарантируют, что файл не будет использоваться позже, когда будет вызван "set-content".

должно ли 'SourceRegexp' быть заменено любым возможным регулярным выражением? это действительно работает в Power Shell?

Существует Super Sed — расширенная версия sed. Для Windows это отдельный .exe-файл, предназначенный для запуска из командной строки.

Можно попробовать powershell. Вы можете использовать встроенные команды get-content и set-content.

Возможно, это две вещи в PowerShell, которые меньше всего влияют на то, что делает sed ;-). Вероятно, лучше использовать оператор -replace.

Я использую Cygwin. Я сталкиваюсь со многими людьми, которые не понимают, что если вы поместите двоичные файлы Cygwin в свою PATH, вы сможете использовать их из командной оболочки Windows. Вам не нужно запускать Cygwin Bash.

Вы также можете ознакомиться со службами Windows для Unix, доступными в Microsoft (но только в версии Professional и более поздних версиях Windows).

Попробуйте fart.exe. Это утилита поиска и замены текста, которую можно использовать в пакетных программах команд.

Если я действительно не могу использовать *nix-подобную оболочку, я предпочитаю ее, так как это небольшой автономный исполняемый файл без зависимостей.

Я впервые пытаюсь использовать SED. Чтобы усложнить ситуацию, я использую его в Windows. Я скачал с этого источника. Поскольку у меня нет прав на установку на моем рабочем компьютере, я создал папку в своем профиле для исполняемых файлов и добавил ее в свой PATH .

У меня возникли проблемы с использованием SED в первый раз. Продолжается сбой с ошибкой:

Я попробовал несколько разных примеров из этого руководства, но не смог. Я обнаружил, что ни у кого больше нет этой проблемы. Что мне попробовать? Я пытался инкапсулировать его в кавычки, двойные кавычки и обратные кавычки. Ничего не помогает.

Я бы настоятельно рекомендовал cygwin, оболочка Windows является такой PITA для unix-подобных команд. Однако, если вы планируете придерживаться оболочки Windows, самый простой способ запустить sed или awk, который я нашел, — это создать файл сценария, а затем вызвать файл с флагом -f. Например, sed -f some_sed_script.sed или awk -f some_awk_script.awk

Я думал, что включил свой вклад. Хотел бы я, потому что теперь это работает после того, как я попробовал @RedGrittyBrick дал

3 ответа 3

Это использует sed из unxutils

В отличие от Unix, оболочка командной строки Windows не выполняет разбиение на слова и не удаляет кавычки; программа просто получает одну строку, содержащую всю командную строку. Это означает, что не все программы могут следовать одним и тем же правилам цитирования.

В этом случае версия sed для GnuWin32 поддерживает только один стиль заключения в кавычки — "двойные кавычки" . Например, в моих тестах отлично работает следующее:

Вы также можете получить sed от Cygwin вместе с более полной Unix-подобной системой: оболочками, редакторами и другими инструментами. Будет проще, если вы будете использовать для обучения оболочку Unix, чтобы избежать подобных проблем с синтаксисом в будущем.

@TheSavo просто удалите каталог. есть некоторые записи реестра, связанные с монтированием cygwin, но их можно спокойно игнорировать, их читает только cygwin

Учтите, что это старый вопрос, но если у вас установлен Git Bash, вы можете использовать множество функций Unix (sed /ssh / scp/grep) в среде Windows.

Операционная система GNU
Поддерживается Free Software Foundation

Отправка GNU

sed (редактор потока) — это неинтерактивный текстовый редактор командной строки.

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

Содержание

Получение справки

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

    Загрузки

    Последний источник

    Последний исходный код с историей изменений можно просмотреть с помощью cgit или gitweb. Предполагая, что у вас установлен git, вы можете получить последнюю версию с помощью этой команды:

    Обратите внимание, что мы не рекомендуем использовать тестовые версии sed для работы.

    Списки рассылки

    Вам не нужно быть подписанным, чтобы публиковать сообщения в любом списке рассылки GNU. Однако тех, кто не является подписчиком, модерируют люди, поэтому проявите терпение, ожидая получения вашего электронного письма.

    Вы можете подписаться на любой список рассылки GNU через Интернет, как описано ниже. Или вы можете отправить пустое письмо со строкой заголовка Subject: просто «подписаться» на соответствующий список -request. Например, чтобы подписаться на основной список sed-devel, вы должны отправить письмо без текста и в строке заголовка Subject: просто «подписаться».

    Необходимо модерировать списки рассылки sed, чтобы предотвратить поток спама. Сообщения в списки хранятся для публикации модератором списков. Иногда модераторы временно недоступны. Пожалуйста, будьте терпеливы при публикации. Если вы в конечном итоге не видите сообщение в архиве списка, значит, оно не было опубликовано.

    Попробовать последнюю тестовую версию (если она доступна) всегда приветствуется. О тестовых выпусках sed обычно объявляют в списке рассылки для тестировщиков платформ.

    Этикет списка рассылки

    Пожалуйста, не отправляйте сообщения, закодированные как HTML или base64 MIME, или включенные в несколько форматов. Пожалуйста, отправляйте сообщения в виде обычного текста. Пожалуйста, включите описательную строку темы. Если все предметы являются ошибками, то их невозможно отличить.Пожалуйста, избегайте отправки больших сообщений, таких как файлы журналов, вывод трассировки системных вызовов и другой контент, в результате чего сообщения размером более 40 КБ, в списки рассылки без предварительного контакта. Их лучше всего отправить непосредственно тем, кто запрашивает эту информацию после первоначального контакта.

    Пожалуйста, помните, что разработка GNU sed осуществляется на добровольной основе, и вы также можете внести свой вклад в ее разработку. Информацию о том, как внести свой вклад в проект GNU, можно найти в разделе Как помочь GNU.

    Сопровождающие

    GNU sed в настоящее время поддерживается Джимом Мейерингом и Ассафом Гордоном.

    «Фонд свободного программного обеспечения (FSF) — это некоммерческая организация, перед которой стоит всемирная миссия по продвижению свободы пользователей компьютеров. Мы защищаем права всех пользователей программного обеспечения».

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

    Я пытался создать свою программу в /usr/local/bin.

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

    Программа 'sed' в настоящее время не установлена. Вы можете установить его, набрав

    Как я могу избавиться от "sed" или чего-то подобного.

    введите здесь описание изображения

    Что я обнаружил на данный момент о sed, так это SED Stream Editor, который манипулирует текстом. Раньше я использовал его в своем .bashrc для синтаксического анализа git и окрашивания текста. Теперь я отключил функцию синтаксического анализа git в моем .bashrc.

    Как снова установить sed?

    Я запустил apt-get install sed . Он говорит мне, что sed уже является самой новой версией. SED теперь вызывает у меня больше проблем. Мои команды git ломаются, и даже мой apt-get remove и update иногда тоже ломаются.

    Это еще один пример того, что вызывает у меня SED, поскольку SED не найден

    Какой sed

    Когда я запускаю sed . Он выходит совершенно пустым, он не выводит что-то вроде этого /usr/bin/sed .

    Вот моя текущая PATH=. который я вытащил из /ect/environment

    Какая программа? Его имя? Как вы его запускали? Как вы обновили $PATH? какой у вас сейчас $PATH? отредактируйте свой вопрос и добавьте свои ответы в текст вопроса.

    sed находится в пакете sed. Переустановите его: sudo apt-get install sed. Хотя я не знаю, что за безумие привело к удалению sed.

    3 ответа 3

    Помимо копирования двоичного файла с другого компьютера в надежде, что это правильная версия, эту проблему также можно решить, используя apt или apt-get для установки пакета sed и передав параметр --reinstall, чтобы файл .deb был скачан и установлен, несмотря на то, что менеджер пакетов Ubuntu считает его уже установленным.

    Это также работает с apt-get вместо apt . Он удаляет и переустанавливает пакет за один шаг. Ситуация в этой проблеме заключается в том, что пакет se уже установлен, но исполняемый файл был удален, поэтому переустановка решает эту проблему. Без флага --reinstall менеджер пакетов считает, что ничего делать не нужно, поскольку пакет уже установлен.

    Вы можете сначала запустить sudo apt update, если хотите, хотя в этом случае обычно это не требуется, если только вы не изменили исходные коды программного обеспечения, не сделав этого. Вы также можете передать флаг --purge, если хотите, но здесь он не нужен, так как это просто приведет к удалению conffiles для пакета при его удалении.

    sed — это утилита, которую программам обычно разрешено считать существующей и полагаться на себя. Как вы заметили, сценарии, которые запускаются при установке, удалении или обновлении программного обеспечения, могут использовать sed. Это источник ваших конкретных сообщений об ошибках. Теоретически APT или dpkg могут полагаться на него напрямую и не смогут переустановить его. На практике этого не происходит, и я этого не ожидаю. Я тестировал это на Ubuntu 16.04 LTS.

    Я не могу вспомнить ни одной ситуации, когда замена бинарного файла решает проблему, но переустановка не работает и сразу не показывает ошибку (см. комментарии к сообщению). Хотя я не могу быть на 100% уверен, что эти инструкции сработают для вас, потому что, возможно, больше было сломано, чем задокументировано в вопросе, в целом они должны работать по крайней мере так же надежно, как ручная замена /bin/sed для других, которые сталкиваются с этой проблемой.

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