Аналог sed для windows

Обновлено: 05.07.2024

Аналоги Linux-программ в Windows:)) [20.03.2005]

Правила заполнения таблицы:
1) На несколько программ Windows можно привести один их общий Линукс аналог, и наоборот - на одну программу Windows можно приводить сразу несколько Linux аналогов.
2) Не стоит стрелять из пушки по воробью - стоит приводить программы одинаковых весовых категорий (например, все же не очень корректно приводить OpenOffice как аналог блокнота). По возможности размер программ (в мегабайтах) и доступность должны быть сопоставимы.
3) Стабильность Linux-программы должна быть такой же, как у программы для Windows, а лучше - выше :).
4) Желательна ссылка на то, где можно взять программу для Линукс.
5) Если Windows программа имеет графический интерфейс, то и Линукс программа должна его иметь (ну, или хотя бы доступный и рабочий FrontEnd к консольной программе).
6) Порядок расположения программ в этой таблице: сначала самые лучшие, известные и близкие аналоги (по возможности), а потом - все остальные.

Важное идеологическое различие между Windows и Linux:
Большинство программ для Windows создаются по принципу "все в одном" (каждый разработчик сам реализует все в своем продукте). Так же этот принцип называют "Windows-way".
Идеология UNIX/Linux - один компонент или одна программа должны выполнять только какую-то одну задачу, но зато выполнять её хорошо. ("UNIX-way"). Программы под Linux напоминают конструктор LEGO (например, если существует программа для проверки орфографии, то её используют при разработке текстового редактора, или если уже существует мощная консольная программа для скачивания файлов, то проще написать к ней графический интерфейс (a.k.a Front-end), и т.д).
Этот принцип очень важен и его нужно учитывать при поиске аналогов Windows-программ в Linux :).

Внимание! В таблице могут присутствовать ошибки и несоответствия!! (сообщить об ошибке).
Около 90% программ, указанных в колонке "Linux", не являются прямыми и 100-процентными аналогами соответствующих программ из колонки "Windows". Они просто предназначены для той же самой цели. Большинство программ, указанных в таблице, присланы посетителями этой страницы, поэтому составители не несут никакой ответственности за различные несоответствия :).

Для тех, кого больше интересуют Windows-программы:
1) Колонка "Windows" в этой таблице является второстепенной, и поэтому в ней не перечисляется _абсолютно_ весь существующий софт - только самые лучшие и популярные программы.
2) Многие программы для Linux могут быть запущены и под Windows - с помощью CygWin и других эмуляторов Linux.

Программы и игры для Windows, которые можно запустить под Wine/WineX:
1) Официальный каталог Windows-программ, идущих под Wine. (от Codeweavers). В базе данных - более 1000 программ, поэтому каталог имеет разветвлённую структуру и систему навигации.
2) Официальный список Windows-игр, которые запускаются под WineX (от Transgaming). Это - страница для поиска игр, а это - полный список игр, идущих под WineX (очень большой!).

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

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

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

Что вы подразумеваете под "родным" . Устанавливается для работы в cmd.exe или для работы без установки вообще? Если первое, см. GnuWin32 ref'd ниже; если последнее, нет. Нет предустановленного родного седа для windows. Под нативным я имел в виду решение, которое работает на всех окнах без установки дополнительных вещей. Оставьте cmd.exe позади и используйте вместо него PowerShell. Если вы просто хотите удалить определенные строки из файла, используйте FIND /?

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

Для более подробной информации смотрите запись в блоге Zain Naboulsis .

Кроме того: если вы хотите вызвать его из обычного cmd, просто @powershell -Command "get-content . ". Единственное предостережение заключается в том, что вы должны избегать кавычек: . -Command "get-content . \" expression \ ", . " @Tarc AFAIR, вы можете использовать одинарные кавычки в вашей команде и использовать двойные кавычки вместо этой команды Я попробовал это сегодня на файле, чтобы удалить некоторые вещи между кавычками в определенных местах, только чтобы обнаружить, что выходной файл был почти в два раза больше оригинала. Причина, по-видимому, заключается в том, что этот метод изменил способ обработки строк в файле, чтобы использовать «\ r \ n» вместо «\ n». Удвоение из-за \ r \ n будет означать, что ваш файл состоит исключительно из новых строк. Вот настоящая причина: кодирование . @ and-bri (Get-Content c: \ temp \ test.txt) .replace ('[MYID]', 'MyValue') | Set-Content c: \ temp \ test.txt

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

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

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

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

Это не совсем то, чего я хочу, однако я верю, что зависимость от VBS - самое легкое решение. GnuWin32 - это нативное решение, если вы имеете в виду нативный язык, предназначенный для работы в «нормальной» среде Windows (в отличие от CygWin). Попробуйте их, и вы начнете ожидать, что они будут в КАЖДОЙ системе Windows, которую вы используете. . Работает для моего случая! Кроме того, не забудьте опцию "// NoLogo" cscript. Если это не так, подумайте, как выглядит ваш другой код! Удивительно, спасибо. Аналогичная утилита поиска и замены регулярных выражений может быть выполнена с помощью JScript. Преимущество JScript над VBScript заключается в том, что его можно легко комбинировать с пакетами в одном скрипте, что упрощает использование утилиты в контексте пакета или командной строки. Доступна надежная гибридная утилита JScript / batch под названием REPL.BAT . У этого есть много параметров командной строки. Полная документация встроена в скрипт. Это, конечно, не имеет полной возможности sed, но даже в этом случае, это довольно мощный.

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

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

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

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

Кстати, я не писал это, но я не могу вспомнить, откуда я это взял.

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

Работает отлично. Примечание: круглые скобки в «get-content» гарантируют, что файл не будет использоваться позже, когда будет вызван «set-content». что-то подобное возможно в CMD? в понимании, это только для pwsh должен ли SourceRegexp быть заменен любым возможным регулярным выражением? это действительно работает в Power Shell?

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

Это, вероятно, две вещи в PowerShell, которые в наименьшей степени способствуют тому, что sed делает ;-). -replace Оператор, вероятно, лучше предложение.

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

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

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

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

редактировать или редактировать

И то, и другое больше не существует в 64-битных версиях Windows.

Вы можете посмотреть на GNU Tools , они предоставляют (помимо прочего) sed на окнах.

Существует вспомогательный командный файл для Windows, repl.bat который имеет большую часть возможностей SED, но doesn't require any additional download или установки. Это гибридный пакетный файл, который используется Jscript для реализации функций и так далее swift , doesn't suffer from the usual poison characters пакетной обработки и с легкостью обрабатывает пустые строки.

Другой вспомогательный пакетный файл с именем findrepl.bat дает пользователю Windows большую часть возможностей, GREP а также основан на Jscript гибридном пакетном файле. Он разделяет преимущества repl.bat

Ссылка на дропбокс для repl недоступна. У вас есть дополнительная ссылка?

Насколько я знаю, ничего похожего на sed в комплекте с окнами. Однако sed доступен для Windows в нескольких различных формах, в том числе как часть Cygwin, если вам нужна полноценная подсистема POSIX, или как собственный исполняемый файл Win32, если вы хотите запускать просто sed из командной строки.

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

Cygwin работает, но эти утилиты также доступны. Просто поместите их на свой диск, поместите каталог в свой путь, и у вас есть много ваших дружественных утилит unix. Облегченный ИМХО, что Cygwin (хотя это работает так же хорошо).

Здесь представлен фрагмент будущей книги «Основные инструменты и практики для начинающего разработчика программного обеспечения» Бальтазара Рубероля и Этьена Броду. Книга должна помочь образованию подрастающего поколения разработчиков. Она охватит такие темы, как освоение консоли, настройка и эффективная работа в командной оболочке, управление версиями кода с помощью git , основы SQL, инструменты вроде Make , jq и регулярные выражения, основы сетевого взаимодействия, а также лучшие практики разработки программного обеспечения и совместной работы. В настоящее время авторы упорно работают над этим проектом и приглашают всех поучаствовать в списке рассылки.

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

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

Заставьте каждую программу хорошо выполнять одну функцию — «Основы философии Unix»

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

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

Файл CSV с примерами доступен в онлайне. Можете скачать его для проверки материала.

Команда cat используется для составления списка из одного или нескольких файлов и отображения их содержимого на экране.

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


Если -n не указано, head выводит первые десять строк указанного файла или входящего потока.

tail — аналог head , только он выводит последние n строк в файле.


Если хотите вывести все строки, расположенном после n-й строки (включая её), можете использовать аргумент -n +n .


В нашем файле 43 строки, поэтому tail -n +42 выводит только 42-ю и 43-ю строки из него.

Если параметр -n не указан, tail выведет последние десять строк в указанном файле или входном потоке.

tail -f или tail --follow отображают последние строки в файле и каждую новую строку по мере записи в файл. Это очень полезно для просмотра активности в реальном времени, например, что записывается в логи веб-сервера и т. д.

wc (word count) выводит количество символов ( -c ), слов ( -w ) или строк ( -l ) в указанном файле или потоке.


По умолчанию отображается всё вышеперечисленное.


Если текстовые данные передаются по конвейеру или перенаправлены в stdin , то отображается только счётчик.

grep — это швейцарский нож фильтрации строк по заданному шаблону.

Например, можем найти все вхождения слова mutex в файле.


grep может обрабатывать либо файлы, указанные в качестве аргументов, либо поток текста, переданный на его stdin . Таким образом, мы можем сцеплять несколько команд grep для дальнейшей фильтрации текста. В следующем примере мы фильтруем строки в нашем файле metadata.csv , чтобы найти строки, содержащие и mutex, и OS.


Рассмотрим некоторые опции grep и их поведение.

grep -v выполняет инвертное сопоставление: фильтрует строки, которые не соответствуют шаблону аргументов.


grep -i выполняет сопоставление без учёта регистра. В следующем примере grep -i os находит как OS, так и os.


grep -l выводит список файлов, содержащих совпадение.


Команда grep -c подсчитывает, сколько раз найден образец.


grep -r рекурсивно ищет файлы в текущем рабочем каталоге и всех его подкаталогах.


grep -w показывает только совпадающие целиком слова.

cut извлекает часть файла (или, как обычно, входного потока). Команда определяет разделитель полей (который разделяет столбцы) с помощью опции -d , а порядковые номера столбцов для извлечения с помощью опции -f .

Например, следующая команда извлекает первый столбец из последних пяти строк нашего CSV-файла.


Поскольку мы имеем дело с CSV, то столбцы разделяются запятой, а за извлечение первого столбца отвечает опция -f 1 .

Можно выбрать и первый, и второй столбцы, используя опцию -f 1,2 .

paste объединяет вместе два разных файла в один многоколоночный файл.


По умолчанию paste использует разделитель табуляции, но его можно изменить с помощью параметра -d .


Ещё один распространённый способ использования paste — объединение всех строк в потоке или файле с помощью заданного разделителя, используя комбинацию аргументов -s и -d .


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

Команда sort , собственно, сортирует данные (в указанном файле или входном потоке).


sort -r выполняет обратную сортировку.


sort -n сортирует поля по их арифметическому значению.

uniq обнаруживает и отфильтровывает соседние одинаковые строки в указанном файле или входном потоке.


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


uniq -c в начале каждой строки вставляет количество её вхождений.


uniq -u отображает только уникальные строки.

Примечание. uniq особенно полезен в сочетании с сортировкой, поскольку конвейер | sort | uniq позволяет удалить все дублирующиеся строки в файле или потоке.

awk — это чуть больше, чем просто инструмент обработки текста: на самом деле у него целый язык программирования. В чём awk действительно хорош — так это в разбиении файлов на столбцы, и делает это с особенным блеском, когда в файлах перемешаны пробелы и табы.

Как видим, столбцы разделены либо пробелами, либо табуляциями, и не всегда одинаковым количеством пробелов. cut здесь бесполезен, потому что работает только с одним символом-разделителем. Но awk легко разберётся с таким файлом.

awk '< print $n >' выводит n-й столбец в тексте.


Хотя awk способен на гораздо большее, выдача колонок составляет, наверное, 99% вариантов использования в моём личном случае.

tr расшифровывается как translate. Эта команда заменяет одни символы на другие. Она работает либо с символами, либо с классами символов, такими как строчные, печатные, пробелы, буквенно-цифровые и т. д.

На стандартных входных данных tr <char1> <char2> заменяет все вхождения <char1> на <char2>.


tr может переводить классы символов с помощью нотации [:class:] . Полный список доступных классов описан на справочной странице tr , но некоторые продемонстрируем здесь.

[:space:] представляет все типы пробелов, от простого пробела до табуляции или символа новой строки.


Все символы, похожие на пробелы, переведены в запятую. Обратите внимание, что символ % в конце выдачи означает отсутствие завершающей новой строки. Действительно, этот символ тоже переведён в запятую.

[:lower:] представляет все строчные символы, а [:upper:] — все прописные. Таким образом, преобразование между ними становится тривиальным.


tr -c SET1 SET2 преобразует любой символ, не входящий в набор SET1, в символы набора SET2. В следующем примере все символы, кроме указанных гласных, заменяются пробелами.


tr -d удаляет указанные символы, а не заменяет их. Это эквивалент tr <char> '' .


tr также может заменить диапазоны символов, например, все буквы между a и e или все числа между 1 и 8, используя нотацию s-e , где s — начальный символ, а e — конечный.


Команда tr -s string1 сжимает все множественные вхождения символов в string1 в одно-единственное. Одним из наиболее полезных применений tr -s является замена нескольких последовательных пробелов одним.

Команда fold сворачивает все входные строки до заданной ширины. Например, может быть полезно убедиться, что текст помещается на дисплеях небольшого размера. Так, fold -w n укладывает строки по ширине n символов.


Команда fold -s будет разбивать строки только на символах пробела. Её можно объединить с предыдущей, чтобы ограничить строким заданным количеством символом.

sed — это неинтерактивный потоковый редактор, который используется для преобразования текста во входном потоке строка за строкой. В качестве входных данных используется или файл, или stdin , а на выходе тоже или файл, или stdout .

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


Хотя sed выполняет множество функций, мы рассмотрим только замену текста как один из самых распространённых вариантов использования.

Замена текста

Команда замены sed выглядит следующим образом:


Пример: замена первого экземпляра слова в каждой строке в файле:


Мы видим, что в первой строчке заменяется только первый экземпляр hello . Чтобы заменить все вхождения hello во всех строках, можно использовать опцию g (означает global).


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


Адрес говорит редактору, в какой строке или диапазоне строк выполнять подстановку.


Адрес 1 указывает заменять hello на Hey I just met you в первой строке. Можем указать диапазон адресов в нотации <start>,<end> , где <end> может быть либо номером строки, либо $ , то есть последней строкой в файле.


По умолчанию sed выдаёт результат в свой stdout , но может отредактировать и оригинальный файл с опцией -i .

Примечание. В Linux достаточно только -i . Но в macOS поведение команды немного отличается, поэтому сразу после -i нужно добавить '' .

Фильтрация CSV с помощью grep и awk

В этом примере grep в файле metadata.csv сначала фильтрует строки, содержащие слово gauge , затем те, у которых query в четвёртой колонке, и выводит название метрики (1-я колонка) с соответствующим значением per_unit_name (5-я колонка).

Вывод адреса IPv4, связанного с сетевым интерфейсом

Команда ifconfig <interface name> выводит сведения по указанному сетевому интерфейсу. Например:


Затем запускаем grep для inet , что выдаст две строки соответствия.


Затем с помощью grep -v исключаем строку с ipv6 .


Наконец, с помощью awk запрашиваем второй столбец в этой строке: это IPv4-адрес, связанный с нашим сетевым интерфейсом en0 .

Примечание. Мне предложили заменить grep inet | grep -v inet6 такой надёжной командой awk :


Она короче и конкретно нацелена на IPv4 с условием $1 == "inet" .

Извлечение значения из файла конфигурации

В файле конфигурации git текущего пользователя ищем значение editor = , обрезаем знак = , извлекаем второй столбец и удаляем все пробелы вокруг.

Извлечение IP-адресов из файла журнала


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


Затем awk '< print $12 >' извлекает из строки IP-адрес.


Команда sed 's@/@@' удаляет начальный слэш.

Примечание. Как мы уже видели ранее, в sed можно использовать любой разделитель. Хотя обычно в качестве разделителя используется / , здесь мы заменяем именно этот символ, что слегка ухудшит читаемость выражения подстановки.

sort | uniq -c сортирует IP-адреса в лексикографическом порядке, а затем удаляет дубликаты, добавляя перед IP-адресами количество вхождений каждого.


sort -rn | head -n 10 сортирует строки по количеству вхождений, численно и в обратном порядке, чтобы главные нарушители выводились в первую очередь, из которых отображаются 10 строк. Последняя команда awk < print $2 >извлекает сами IP-адреса.

Переименование функции в исходном файле

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

Примечание. На macOS вместо sed -i используйте sed -i '' .

Однако мы переименовали функцию только в оригинальном файле. Это сломает импорт bool_from_str в любом другом файле, поскольку эта функция больше не определена. Нужно найти способ переименовать bool_from_str повсюду в нашем проекте. Такого можно добиться с помощью команд grep , sed , а также циклов for или с помощью xargs .

Чтобы заменить в нашем проекте все вхождения bool_from_str , сначала нужно рекурсивно найти их с помощью grep -r .


Поскольку нас интересуют только файлы c совпадениями, также необходимо использовать опцию -l/--files-with-matches :

Затем можем использовать команду xargs для осуществления действий с каждой строки выходных данных (то есть всех файлов, содержащих строку bool_from_str ).


Опция -n 1 указывает, что каждая строка в выходных данных должна выполнить отдельную команду sed .

Затем выполняются следующие команды:


Если команда, которую вы вызываете с помощью xargs (в нашем случае sed ), поддерживает несколько аргументов, то следует отбросить аргумент -n 1 для производительности.


Эта команда затем исполнит

Примечание. Из синопсиса sed на ман-странице видно, что команда может принять несколько аргументов.


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

Мы видим, что произведены замены для всех вхождений bool_from_str .


Как это часто бывает, существует несколько способов достижения одного и того же результата. Вместо xargs мы могли бы использовать циклы for , чтобы перебирать строки по списку и выполнять действие над каждым элементом. У этих циклов такой синтаксис:


Если обернуть нашу команду grep в $() , то оболочка выполнит её в подоболочке, результат чего затем будет повторён в цикле for .


Эта команда выполнит


Синтаксис циклов for кажется мне более чётким, чем у xargs , однако последняя может выполнять команды параллельно, используя параметры -P n , где n — максимальное количество параллельных команд, выполняемых одновременно, что может дать выигрыш в производительности.

Все эти инструменты открывают целый мир возможностей, так как позволяют извлекать и преобразовывать данные, создавая целые конвейеры из команд, которые, возможно, никогда не предназначались для совместной работы. Каждая из них выполняет относительно небольшую функцию (сортировка sort , объединение cat , фильтры grep , редактирование sed , вырезание cut и т. д.).

Любую задачу, включающую текст, можно свести к конвейеру более мелких задач, каждая из которых выполняет простое действие и передаёт свои выходные данные в следующую задачу.

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

  • grep строк, которые соответствуют шаблону строк с IP-адресами
  • найти столбец с IP-адресом, извлечь его с помощью awk
  • отсортировать список IP-адресов с помощью sort
  • устранить смежные дубликаты с помощью uniq
  • подсчитать количество строк (то есть уникальных IP-адресов) с помощью wc -l

Примеры в этой статье были надуманными, но я предлагаю вам прочитать удивительную статью «Инструменты командной строки могут быть в 235 раз быстрее, чем ваш кластер Hadoop», чтобы получить представление о том, насколько полезны и мощны эти команды на самом деле и какие реальные проблемы они могут решить.

  1. Подсчитайте количество файлов и каталогов, расположенных в вашем домашнем каталоге.
  2. Отобразите содержимое файла только прописными буквами.
  3. Подсчитайте, сколько раз встречалось каждое слово в файле.
  4. Подсчитайте количество гласных в файле. Отсортируйте результат от наиболее распространённой до наименее распространённой буквы.

Если интересно поучаствовать в проекте, подписывайтесь на список рассылки!

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

Изменить: Я ищу встроенное решение командной строки.

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

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

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

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

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

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

И вы запускаете его следующим образом:

Что похоже на версию sed, предоставленную "ткачиком купюр", но я думаю, что этот более дружелюбный с точки зрения специальных символов (' > </).

Кстати, я не писал этого, но не могу вспомнить, откуда я его получил.

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

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

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

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

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

edlin или редактировать

Вы можете посмотреть GNU Tools, они обеспечивают (среди прочего) sed на окнах.

Насколько я знаю, ничего подобного sed не связано с окнами. Однако sed доступен для Windows в нескольких разных формах, в том числе в составе Cygwin, если вы хотите полноценную подсистему POSIX или как исполняемый файл Win32, если вы хотите запускать только sed в командной строке.

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

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