Поиск и замена строки в файлах windows

Обновлено: 25.06.2024

Иногда возникает необходимость заменить определенный кусок текста в нескольких документах: например, сменить пути установки в серии конфигурационных файлов или быстро изменить оформление в серии каких-нибудь договоров и т. д. Конечно, можно открыть каждый файл в редакторе, произвести поиск и замену штатными средствами; но если этих файлов больше десятка, то ручная работа становится весьма нудной, а если их больше полусотни, то это просто трата времени. Для решения таких задач есть специальные программы-автоматизаторы, три из которых - RQ Search and Replace, MultiReplace и @Text Replacer - будут рассмотрены в этом обзоре. Каждая из них имеет разные возможности и, в общем-то, разную область применения.

@Text Replacer

На вкладке "Текст и расположение" надо указать путь к файлу или файлам (допускаются стандартные подстановочные символы * и ?), что заменять и на что заменять. Флажок "Просмотреть вложенные папки" позволяет произвести замену не только в указанной папке, но и во всех ее подпапках. На вкладке "Дополнительно" можно указать игнорируемые символы (полезно, если текст разбит символами конца строки, например тексты с lib.ru, или между словами стоит больше одного пробела), установить классическую опцию "Учитывать регистр" и ввести путь к файлу, где будет сохранен отчет о переименовании.

После выставления всех опций и нажатия кнопок "Заменить" или "Найти" программа выдаст список обработанных файлов внизу основного окна. Форму выдачи результатов можно изменить в меню "Вид" - любой вариант из стандартных "Список", "Таблица" и т. д. К сожалению, какой бы пункт вы ни выбрали – программа выдаст только перечень файлов, а не искомые места в них. Впрочем, вооружившись любым просмотрщиком текста (например, встроенным в Total Commander), в них легко можно отыскать нужные строки.

Замечание: хотя @Text Replacer не поддерживает нестандартные методы замены, наподобие "Вставить Б между А и В", это не значит, что обязательно нужна другая программа. Того же эффекта можно добиться, заменив строчку "А В" на "А Б В"; то же самое касается удаления выбранного текста и вставки до и после указанного отрывка. Выделение таких действий в отдельную функцию оправдано при больших кусках для правки, тогда это экономит время.

Multi Replace

Программа Multi Replace предоставлена компанией Alphynsoftware. Основные поля в программе такие же, как и в предыдущей, – путь поиска, окно исходного текста и текста для замены, но эта утилита заметно функциональней @Text Replacer. Существует две версии программы, незначительно отличающиеся друг от друга, – Lite ($19,95) и Pro ($29,95). Пробная версия полнофункциональна, но ограничена 15 днями.

Среди преимуществ можно отметить более мощную работу с подстановочными символами – разрешается задача диапазона символов через [a-z] и отмена служебных символов при помощи обратного слеша – "". (То есть комбинацией "*" можно задать поиск в тексте именно символа *, а не любого символа.)

Очень удобен флаг "Помещать результаты в новую директорию", особенно в случае, когда нужно произвести несколько пакетных замен подряд на каком-нибудь бланке. Также можно выбрать типы файлов, которые будут (или напротив – не будут) учитываться при поиске или замене. Что приятно, некоторые из наиболее часто используемых расширений уже указаны в выпадающем меню. Используя кнопки "+" и "-", можно добавлять или удалять их (только в Pro).

Флаг "Многострочный текст" аналогичен флагу "Игнорировать конец строки" в @Text Replacer. Имейте в виду, что в режиме многострочного текста нельзя применить отмену спецсимвола при помощи знака ""!

Групповая замена позволяет задать выполнение нескольких замен одновременно. При наличии большого количества файлов это поможет сэкономить время, равно как и флаг "Экспресс-замена" (выполнение всех замен только с одним запросом).

Среди функций также стоит отметить "Авторезервирование", которое создает копии изменяемых программой файлов. Выполняя автозамену для важных документов, особенно такую, которую нельзя совершить в обратную сторону, будет нелишним поставить этот флажок. Копии будут храниться в папке Backup в директории программы.

Часто случается, что нужно произвести замену несколько сложнее, чем А на Б. Например, нужно вставить в текст отчество между именем и фамилией или просто удалить некоторые куски текста. В таком случае справа от опций можно выбрать нестандартный способ замены.

Все параметры программы можно использовать и для дальнейшей работы с автозаменой, используя иконки "Сохранить параметры замены" и "Загрузить параметры замены" (Только в Pro).

RQ Search&Replace

RQ Search&Replace от MiraSoftware - самая мощная из всех трех программ. Кроме стандартного алгоритма поиска и замены файлов содержит в себе множество дополнительных функций. Демонстрационная версия позволяет обрабатывать или только один файл, или несколько файлов, но не больше 8 килобайт каждый. Выбор можно сделать непосредственно во время работы программы из меню "Помощь". Стоимость полнофункциональной версии – $19.

Основной принцип работы – задание различных правил обработки текста в специальной таблице, содержимое текущего ее ряда отображается в окнах Find what и Replace with. Если программа развернута на полный экран, то внизу появляется детальный лог, содержащий все совершенные программой операции.

  • блок - любой массив данных;
  • строка - массив данных до разрыва строки;
  • слово целиком - массив данных, отделенный пробелами;
  • блок, заключенный в. - все символы между А и Б;
  • MSWord - вызывает отдельное диалоговое окно, в котором можно настроить замену, используя все функции одноименного окна Word, включая спецсимволы;
  • HTML-тег - позволяет удалить теги (вместе с парными закрывающими, что удобно) или модифицировать их: например, заменить аргумент или перевести написание в другой регистр.

Меню "Таблица" дублирует все вышеупомянутые функции, позволяя установить их сразу для нескольких строк.

Из меню "Проект" можно сохранять и загружать параметры поиска и замены, как и в Multi Replace.

В меню "Кодировка" можно указать кодировку, которая будет принята по умолчанию при обработке. Программа умеет работать с Win1251, koi8, DOS-кодировками, а также с UTF8, отдельно вынесенном в меню "Опции".

В следующем пункте – "Просматривать в виде" - можно выбрать способ интерпретации текста в окне предпросмотра. Программа понимает не только обычный plain text, но и RTF, и HTML. (Удобно для редактирования архива веб-страниц, где строки разбиты тегами.)

Меню "Операции" содержит несколько дополнительных алгоритмов, на которых стоит остановиться поподробнее.

Создать индекс-файл. Работает правильно, только если подсветить в окне выбора файлов .html страницы. Создает файл со ссылками на каждую из страниц. Файл получается абсолютно без всякого оформления, поэтому сгодится или в качестве основы для нормального индекса, или же для внутреннего использования при каталогизации сохраненных веб-страниц.

Text-HTML. Функция, превращающая текст в HTML-страницу. Несмотря на то что мусорного кода операция эта практически не добавляет, для русскоязычного пользователя она абсолютно бесполезна: получившийся из кириллического текста файл с символами вида "’e7" не смогла прочитать ни одна программа, включая саму Search&Replace. С файлами на европейских языках все ОК.

HTML-Text. Производит обратное действие (в этом направлении кириллица обрабатывается нормально), но зачем это нужно – не очень понятно, ведь того же самого можно добиться, просто-напросто выделив текст в любом браузере.

Удалить файлы нулевого размера. Название функции говорит само за себя. Удаляет все пустые файлы из выбранной папки. Можно запускать в конце работы, чтобы удалить файлы, чье содержимое уже было очищено.

Заменить символы 0-31. Символы с кодами 0-31 в коде ASCII считаются управляющими, и иногда может потребоваться очистить от них текст (например, убрать лишние переводы строки), для чего и предназначена эта операция.

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

Меню "Копии" и "История папок" дают пользователю гибкие возможности по управлению резервными копиями измененных файлов без необходимости пользоваться файл-менеджером.

Итоговое сравнение

@Text Replacer

Плюсы: низкая стоимость, простота в освоении.

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

MultiReplace

Плюсы: удобный и понятный интерфейс, богатый набор фунцкий.

Минусы: из всех представленных программ – самая дорогая, даже Lite.

RQ Search & Replace

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

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

Выводы

Я пишу командный файл script с использованием командной строки Windows и хочу изменить каждое вхождение какого-либо текста в файл (например, "FOO" ) другим (например, "BAR" ). Каков самый простой способ сделать это? Любые встроенные функции?

ОТВЕТЫ

Ответ 1

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

У меня Windows 7, которая поставляется со встроенным PowerShell. Вот скрипт, который я использовал для поиска/замены всех экземпляров текста в файле:

Чтобы объяснить это:

  • powershell запускает powershell.exe, входящий в состав Windows 7
  • -Command ". " - аргумент командной строки для powershell.exe, содержащий команду для запуска
  • (gc myFile.txt) читает содержимое myFile.txt ( gc - сокращение от команды Get-Content )
  • -replace 'foo', 'bar' просто запускает команду замены, чтобы заменить foo на bar
  • | Out-File myFile.txt | Out-File myFile.txt вывод в файл myFile.txt
  • -encoding ASCII позволяет транскрибировать выходной файл в Unicode, как отмечают комментарии

Powershell.exe уже должен быть частью вашего оператора PATH, но если нет, вы можете добавить его. Его расположение на моей машине: C:\WINDOWS\system32\WindowsPowerShell\v1.0

Ответ 2

Ответ 3

Просто используется FART ( " F ind A nd R eplace T ext" утилита командной строки):
отличное небольшое бесплатное ПО для замены текста в большом наборе файлов.

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

Только проблема: значок веб-сайта FART не совсем со вкусом, утончен или элегантен;)

Обновление 2017 (7 лет спустя) jagb указывает в комментариях к статье 2011 года " FARTing the Easy Way - найти и заменить текст" из Mikail Tunç

Ответ 4

Заменить - заменить подстроку с помощью замены строки Описание: Чтобы заменить подстроку другой строкой, используйте функцию подстановки строк. Показанный здесь пример заменяет все вхождения "тех" орфографических ошибок с "the" в строковой переменной str.

Ответ 5

Создать файл replace.vbs:

Чтобы использовать этот измененный script (который хорошо вызывает replace.vbs), просто введите в командной строке команду, похожую на это:

cscript replace.vbs "C:\Scripts\Text.txt" "Jim " "James "

Ответ 6

Он использует комбинацию FOR , FIND и CALL SET .

Линии, содержащие символы среди "&<>]|^ , могут обрабатываться некорректно.

Ответ 7

Примечание. Обязательно просмотрите обновление в конце этого ответа для ссылки на главный JREPL.BAT, который заменяет REPL.BAT
JREPL.BAT 7.0 и выше поддерживает Unicode (UTF-16LE) через опцию /UTF , а также любой другой набор символов, включая UTF-8, через ADO .

Я написал небольшую гибридную JScript/пакетную утилиту REPL.BAT, которая очень удобна для изменения файлов ASCII (или расширенных ASCII) через командную строку или командный файл. Чистый собственный скрипт не требует установки любого стороннего исполняемого файла, и он работает с любой современной версией Windows с XP. Это также очень быстро, особенно по сравнению с чистыми пакетными решениями.

REPL.BAT просто читает stdin, выполняет поиск и замену регулярного выражения JScript и записывает результат в stdout.

Вот тривиальный пример того, как заменить foo на bar в test.txt, если REPL.BAT находится в вашей текущей папке или, еще лучше, где-то внутри вашего PATH:

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

Я включил ряд опций в утилиту, которые делают ее достаточно мощной. Например, объединение опций M и X позволяет изменять бинарные файлы! Параметр M Multi-line позволяет выполнять поиск по нескольким строкам. Параметр X eXtended substitution pattern предоставляет escape-последовательности, которые позволяют включить любое двоичное значение в заменяющий текст.

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

Вот сценарий REPL.BAT. Полная документация встроена в скрипт.

ВАЖНОЕ ОБНОВЛЕНИЕ

Я прекратил разработку REPL.BAT и заменил его на JREPL.BAT. Эта новая утилита имеет все те же функциональные возможности REPL.BAT и многое другое:

  • Поддержка Unicode UTF-16LE через собственные возможности Unicode CSCRIPT и любой другой набор символов (включая UTF-8) через ADO.
  • Прочтите прямо из /write непосредственно в файл: нет необходимости в каналах, перенаправлении или переместить команду.
  • Включить предоставленный пользователем JScript
  • Функция перевода похожа на unix tr, только она также поддерживает поиск в регулярном выражении и замену JScript
  • Отменить несогласованный текст
  • Строки вывода префикса с номером строки
  • и более.

Как всегда, полная документация встроена в скрипт.

Теперь исходное тривиальное решение еще проще:

Ответ 8

Используйте утилиту fnr . Он получил некоторые преимущества перед fart :

  • Регулярные выражения
  • Дополнительный графический интерфейс. Имеет кнопку "Создать командную строку" для создания текста командной строки для помещения в командный файл.
  • Многострочные шаблоны: GUI позволяет вам легко работать с многострочными шаблонами. В FART вы должны вручную избегать разрывов строк.
  • Позволяет выбрать кодировку текстового файла. Также есть опция автоматического определения.

Пример использования: fnr --cl --dir "<Directory Path>" --fileMask "hibernate.*" --useRegEx --find "find_str_expression" --replace "replace_string"

Ответ 9

Я не думаю, что есть способ сделать это с помощью любых встроенных команд. Я предлагаю вам скачать что-то вроде Gnuwin32 или UnxUtils и используйте команду sed (или загрузите только sed ):

Ответ 10

Я знаю, что опаздываю на вечеринку.

и они оба работают изначально без каких-либо дополнительных инструментов или утилит.

Ответ 11

Когда вы работаете с Git в Windows, просто запустите git-bash и используйте sed . Или, используя Windows 10, запустите "Bash в Ubuntu в Windows" (из подсистемы Linux) и используйте sed .

Редактор потока, но может редактировать файлы напрямую, используя следующую команду:

  • -i используется для редактирования на месте с именем файла.
  • -e указывает команду для запуска.
    • s используется для замены найденного выражения "foo" на "bar", а g используется для замены найденных совпадений.

    Если вы хотите заменить строку в файлах с версией только в репозитории Git, вы можете использовать:

    git ls-files <eventual subfolders & filters> | xargs sed -i -e 's/foo/bar/g'

    который творит чудеса.

    Ответ 12

    Я использовал perl, и это работает чудесно.

    .orig - это расширение, которое оно добавит к исходному файлу

    Для нескольких файлов, соответствующих *.html

    Ответ 13

    или если вы хотите сохранить вывод снова в файл.

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

    Ответ 14

    1) С опцией e? , которая будет оценивать специальные последовательности символов, такие как \n\r и последовательности Unicode. В этом случае будут заменены кавычки "Foo" и "Bar" :

    2) Прямая замена, где Foo и Bar не указаны.

    Ответ 15

    Здесь решение, которое я нашел, работало на Win XP. В моем запущенном пакетном файле я включил следующее:

    Файл replace.bat выглядит следующим образом. Я не нашел способ включить эту функцию в один и тот же командный файл, потому что переменная %%a всегда, кажется, дает последнее значение в цикле for.

    Ответ 16

    Взгляните на Есть ли какая-либо утилита sed для cmd.exe, которая запрашивала эквивалент sed под Windows, также должна применяться к этому вопросу. Краткое содержание:

    • Это можно сделать в пакетном файле, но это не очень.
    • Множество доступных сторонних исполняемых файлов, которые сделают это для вас, если у вас есть роскошь установки или просто копирования через exe
    • Может быть сделано с VBScript или аналогичным, если вам нужно что-то, что можно запустить в окне Windows без изменений и т.д.

    Ответ 17

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

    Однако вы обычно используете оператор FOR в разных формах. Кто-то создал полезный командный файл, который выполняет поиск и замену. Посмотрите здесь. Важно понимать ограничения предоставленного пакетного файла. По этой причине я не копирую исходный код в этом ответе.

    Ответ 18

    Два пакетных файла, которые предоставляют функции search and replace , были написаны членами Qaru dbenham и aacini с использованием native built-in jscript Windows native built-in jscript .

    Они оба robust и very swift with large files по сравнению с обычными пакетными сценариями, а также simpler в использовании для базовой замены текста. Они оба имеют соответствие шаблону Windows regular expression .

    Этот sed-like вспомогательный пакетный файл называется repl.bat (от dbenham).

    Пример использования литерала L :

    Этот grep-like вспомогательный командный файл называется findrepl.bat (от aacini).

    Пример с активными регулярными выражениями:

    Обе они становятся мощными общесистемными утилитами, when placed in a folder that is on the path , или могут использоваться в той же папке с командным файлом, или из командной строки cmd.

    Оба имеют переключатели без case-insensitive и многие другие функции.

    Ответ 19

    Команда командной оболочки работает как шарм

    Ответ 20

    Просто столкнулся с аналогичной проблемой - "Искать и заменять текст в файлах", но, за исключением того, что для обоих имен файлов и поиска /repalce мне нужно использовать регулярное выражение. Поскольку я не знаком с Powershell и хочу сохранить мои поиски для последующего использования, мне нужно что-то более "удобное для пользователя" (желательно, если у него есть GUI).

    Итак, в то время как Googling:) я нашел отличный инструмент - FAR (Найти и заменить) (а не FART).

    Эта небольшая программа имеет приятный графический интерфейс и поддерживает регулярное выражение для поиска в именах файлов и внутри файлов. Только disadventage заключается в том, что если вы хотите сохранить свои настройки, вы должны запустить программу в качестве администратора (по крайней мере, на Win7).

    Ответ 21

    Это одно дело, что пакетный скриптинг просто не работает.

    Связанный с script morechilli будет работать для некоторых файлов, но, к сожалению, он захлестнет те, которые содержат такие символы, как трубы и амперсанды.

    Ответ 22

    Для простой замены строк в файлах я использую с тех пор свободные Xchang32.exe из Коллекция Clay Utilities for Win32.

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

    И ничто другое не требуется для этого небольшого 32-битного консольного приложения, чем файл Xchang32.exe, извлеченный из ZIP файла, в любую директорию, такую ​​как каталог пакетного файла, вызывающий его для замены (s).

    Эта командная строка заменяет в файле MyBinaryFile.bin каждый байт значением 3 на два байта со значениями 2 и 5.

    Общей проблемой с использованием wmic является то, что выход является файлом Unicode, хотя все символы определенно находятся в диапазоне символов ASCII, т.е. имеют значение кодовой точки ниже десятичного числа 128.

    Этот небольшой пакетный код с использованием Xchang32 преобразует выходной файл wmic Unicode, содержащий только символы ASCII в текстовый файл ASCII.

    Но иногда вывод wmic перенаправляется непосредственно в текстовый файл ASCII, в результате чего CR CR LF (0D 0D 0A) в текстовом файле ASCII вместо 0D 0A (возврат каретки + строка-строка). Эти неправильные окончания строк также можно легко скорректировать с помощью Xchang32:

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

    Примечание: ^ и , имеют особое значение в синтаксисе Xchang32 и поэтому должны быть экранированы с помощью другого ^ или , , как это сделано в командной строке выше, или переключателя /s используется для простых строк. Это описано в файле ReadMe32.txt , а также в выводе справки при запуске Xchang32.exe /? в окне командной строки.

    Ответ 23

    @Rachel дал отличный ответ, но вот его вариант, чтобы прочитать содержимое переменной powershell $data . Затем вы можете легко манипулировать контентом несколько раз перед записью в выходной файл. Также посмотрите, как многострочные значения задаются в пакетных файлах .bat.

    Ответ 24

    Использовать powershell в .bat - для Windows 7 +

    кодировка utf8 является необязательной, подходит для веб-сайтов

    Ответ 25

    Я предпочитаю использовать sed из утилит GNU для Win32, необходимо отметить следующее

    • одинарная кавычка '' не будет работать в Windows, вместо этого используйте ""
    • sed -i не будет работать в Windows, для этого потребуется обмен файлами

    Таким образом, рабочий код sed для поиска и замены текста в файле в Windows, как показано ниже

    Ответ 26

    Загрузите Cygwin (бесплатно) и используйте unix-подобные команды в командной строке Windows.

    Ваш лучший выбор: sed

    Ответ 27

    Инструмент, который заменяет строки в файлах, находится в VBScript (требуется Windows Script Host [WSH] для запуска в старых версиях Windows)

    Фильтр, вероятно, не работает с Unicode, если вы не перекомпилируете последний Delphi (или с FreePascal/Lazarus)

    Ответ 28

    Я столкнулся с этой проблемой несколько раз при кодировании в Visual С++. Если у вас есть это, вы можете использовать Visual Studio Find and Replace Utility. Он позволяет вам выбрать папку и заменить содержимое любого файла в этой папке любым другим желаемым текстом.

    С помощью элементов управления Поиск и замена (CTRL+F или CTRL+H) и Поиск и замена в файлах (CTRL+SHIFT+F или CTRL+SHIFT+H) можно найти и заменить текст в редакторе Visual Studio. Вы можете найти и заменить только несколько экземпляров текста с помощью выбора нескольких точек вставки.

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

    Возможность поиска и замены доступна в редакторе, в некоторых других текстовых окнах (например, в результатах поиска), в окнах конструкторов (например, в конструкторе XAML и в конструкторе Windows Forms) и в окнах инструментов.

    Поле Найти/команда доступно как элемент управления панели инструментов, но оно не отображается по умолчанию. Чтобы отобразить поле Найти/команда, выберите на стандартной панели инструментов команду Добавить или удалить кнопки и щелкнув Найти.

    Элемент управления "Поиск и замена"

    • Нажмите CTRL+F для быстрого поиска строки в текущем файле.
    • Нажмите CTRL+H для быстрого поиска и замены строки в текущем файле.

    Элемент управления Поиск и замена отображается в правом верхнем углу окна редактора кода. Он немедленно выделяет все вхождения заданной поисковой строки в текущем документе. Вы можете переходить от одного вхождения к другому, нажав кнопку Найти далее или Найти предыдущий на элементе управления поиска.

    Снимок экрана диалогового окна поиска и замены в Visual Studio 2022.

    Снимок экрана диалогового окна поиска и замены в редакторе Visual Studio 2019 и более ранних версий.

    Перейти к параметрам замены можно, нажав кнопку рядом с текстовым полем Найти. Чтобы изменять по одному вхождению за раз, выберите Заменить следующий рядом с текстовым полем Заменить. Чтобы заменить все найденные совпадения, нажмите кнопку Заменить все.

    Чтобы изменить цвет выделения совпадений, в меню Сервис последовательно выберите Параметры, затем Среда, а затем Шрифты и цвета. В списке Показать параметры для выберите Текстовый редактор, а затем в списке Отображение элементов выберите Выделение найденных совпадений.

    Окна инструмента поиска

    Элемент управления Найти можно использовать в текстовых окнах и окнах кода, таких как окна вывода и результатов поиска, выбрав Правка > Поиск и замена (или нажав клавиши CTRL+F).

    Версия элемента управления Найти также доступна в некоторых окнах инструментов. Например, можно фильтровать список элементов управления в окне панели элементов путем ввода текста в поле поиска. Другие окна инструментов, для которых поддерживается поиск содержимого, включают обозреватель решений, окно Свойства и Team Explorer.

    Поиск и замена в файлах

    • Нажмите CTRL+SHIFT+F для быстрого поиска строки в нескольких файлах.
    • Нажмите CTRL+SHIFT+H для быстрого поиска и замены строки в нескольких файлах.

    Функции Найти/Заменить в файлах аналогичны функциям элемента управления Поиск и замена за исключением того, что можно определить область поиска. Вы можете выполнить поиск не только в текущем открытом файле в редакторе, но также во всех открытых документах, всем решении, текущем проекте и выбранном наборе папок. Также можно выполнять поиск по расширению имени файла. Чтобы перейти к диалоговому окну поиска и замены в файлах, выберите Поиск и замена в меню Правка (или нажмите клавиши CTRL+SHIFT+F).

    Снимок экрана: диалоговое окно &quot;Найти и заменить&quot; в Visual Studio 2022 с открытой вкладкой &quot;Найти в файлах&quot;.

    Снимок экрана: диалоговое окно &quot;Найти и заменить&quot; в Visual Studio 2019 с открытой вкладкой &quot;Найти в файлах&quot;.

    Если вы используете Visual Studio 2019 версии 16.6 или более ранней, диалоговое окно Найти и заменить может выглядеть не так, как показано здесь. Перейдите на версию этой страницы для Visual Studio 2017, чтобы получить правильное описание.

    Снимок экрана: диалоговое окно &quot;Найти и заменить&quot; в Visual Studio 2017 с открытой вкладкой &quot;Найти в файлах&quot;.

    Результаты поиска

    При выборе варианта Найти все откроется окно Результаты поиска со списком найденных совпадений. При выборе результата в списке отображается связанный файл и выделяется искомый текст. Если файл не открыт для редактирования, он открывается на вкладке предварительного просмотра в правой части набора вкладок. Для поиска в списке Результаты поиска можно использовать элемент управления Найти.

    Создание пользовательских наборов папок поиска

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

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

    Создание пользовательских наборов компонентов

    Выбор нескольких точек вставки

    Этот раздел относится к Visual Studio в Windows. Информацию о Visual Studio для Mac см. в статье Выбор блока.

    Новая возможность в Visual Studio 2017 версии 15.8

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

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

    Для выделения с помощью нескольких курсоров нажмите клавиши ALT+SHIFT+щелчок мышью или клавиши ALT+SHIFT+ . , а затем CTRL+SHIFT+клавиша со стрелкой, чтобы расширить выделенные фрагменты. После этого нажмите клавиши CTRL+C, чтобы скопировать текст из нескольких фрагментов. Нажмите ALT+SHIFT+щелчок мышью, чтобы создать несколько точек вставки в каждой строке, где вы хотите их установить. Наконец, нажмите CTRL+V, чтобы вставить каждую из строк под собственный курсор.

    Кроме того, вы можете использовать клавиши ALT+SHIFT+СТРЕЛКА ВВЕРХ (или СТРЕЛКА ВНИЗ) либо ALT+SHIFT+перетаскивание мышью для выделения фрагментов с применением множества курсоров. Ранее эти действия создавали прямоугольный блок выделения. Теперь выделенный блок преобразуется в строки с несколькими курсорами. Этот метод проще и быстрее, чем вставлять отдельные курсоры, точно щелкая мышью в разных местах.

    Если же при расширении фрагмента с несколькими курсорами с помощью ALT+SHIFT+клавиша со стрелкой и ALT+SHIFT+перетаскивание мышью вы хотите оставить выделение блоками, перейдите в раздел Сервис > Параметры > Текстовый редактор > Дополнительно и выберите Использовать выделение блоками.

    Также можно включить использование нескольких курсоров из строки меню, открыв вкладку Правка > Несколько курсоров и выбрав желаемое действие.

    Снимок экрана: всплывающее меню &quot;Несколько курсоров&quot; в Visual Studio 2022.

    На следующем снимке экрана -0000 выбран в трех местах. Если пользователь нажмет Удалить, все три фрагмента будут удалены:

    Выбор нескольких точек вставки в файле XML в Visual Studio

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

    Если вы выбрали ALT как клавишу-модификатор для команды "Перейти к определению" по щелчку мыши в меню Сервис > Параметры, функция выбора нескольких точек вставки недоступна.

    Команды

    Используйте следующие клавиши и действия для выбора нескольких точек вставки:

    Клавиша Действие
    CTRL+ALT + щелчок Добавить дополнительную точку вставки
    CTRL+ALT + двойной щелчок Добавить дополнительное выделенное слово
    CTRL+ALT + щелчок + перетаскивание Добавить дополнительный выделенный фрагмент
    SHIFT+ALT+ . Добавить следующий совпадающий текст как выделенный фрагмент
    SHIFT+ALT+ ; Выделить все совпадающие фрагменты текста
    SHIFT+ALT+ , Удалить последний выделенный фрагмент
    SHIFT+ALT+ / Пропустить следующий совпадающий фрагмент
    ALT + щелчок Добавить выделенное поле
    ESC или щелчок Отменить выбор всех элементов

    Некоторые команды также доступны в меню Изменить в разделе Несколько точек вставки:

    Я пишу сценарий пакетного файла с помощью среды командной строки Windows и хочу изменить каждое вхождение некоторого текста в файле (например. "FOO") с другим (ex. "БАР.)" Как это сделать проще всего? Любые встроенные функции?

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

    у меня есть Windows 7, который поставляется со встроенным PowerShell. Вот скрипт, который я использовал для поиска / замены всех экземпляров текста в файле:

    • powershell запускает powershell.exe, который включен в Windows 7
    • -Command ". " является arg командной строки для в PowerShell.exe, содержащий команду для запуска
    • (gc myFile.txt) читает содержание myFile.txt ( gc сокращенно от Get-Content команда)
    • -replace 'foo', 'bar' просто запускает команду replace для замены foo С bar
    • | Out-File myFile.txt передает выходные данные в файл myFile.txt

    в PowerShell.exe должен быть частью вашего оператора PATH уже, но если нет, вы можете добавить его. Расположение его на моей машине C:\WINDOWS\system32\WindowsPowerShell\v1.0

    просто использовать пердеть ("F ind A nd R eplace T ext" утилита командной строки):
    отличная бесплатная программа для замены текста в большом наборе файлов.

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

    единственная проблема: значок веб-сайта пердеть не совсем со вкусом, изысканный или элегантный;)

    Replace-заменить подстроку с помощью подстановки строк Описание: для замены подстроки другой строкой используйте функцию подстановки строк. Приведенный здесь пример заменяет все вхождения "teh" орфографические ошибки на "the" в строковой переменной str.

    создать файл заменить.vbs:

    использовать этот пересмотренный скрипт (который мы будем называть replace.ВБС) просто введите следующую команду из командной строки:

    cscript replace.vbs "C:\Scripts\Text.txt" "Jim " "James "

    Он использует комбинацию FOR , FIND и CALL SET .

    строки, содержащие символы среди "&<>]|^ может рассматриваться неправильно.

    Примечание - обязательно см. обновление в конце этого ответа для ссылки на улучшенный JREPL.Летучая мышь, которая заменяет REPL.Летучая мышь!--11-->
    JREPL.BAT 7.0 и выше изначально поддерживает unicode (UTF-16LE) через /UTF опция, а также любой другой набор символов, включая UTF-8, через ADO.

    REPL.BAT просто читает stdin, выполняет поиск и замену регулярных выражений JScript и записывает результат в stdout.

    вот тривиальный пример того, как замените foo на bar в тесте.txt, предполагая REPL.BAT находится в вашей текущей папке, или еще лучше, где-то в пределах вашего пути:

    возможности JScript regex делают его очень мощным, особенно способность текста замены ссылаться на захваченные подстроки из текста поиска.

    я включил ряд опций в утилиту, которые делают ее довольно мощной. Например, объединение M и X опции позволяют изменять двоичные файлы! The M многострочная опция позволяет выполнять поиск по нескольким строкам. The X опция расширенного шаблона подстановки предоставляет escape-последовательности, которые позволяют включить любое двоичное значение в текст замены.

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

    вот REPL.Bat скрипт. Полная документация встроена в скрипт.

    ВАЖНОЕ ОБНОВЛЕНИЕ

    я прекратил развитие REPL.Бат, и заменил его на JREPL.ЛЕТУЧАЯ МЫШЬ. Эта новая утилита имеет все ту же функциональность REPL.Летучая мышь, плюс многое другое:

    • поддержка Unicode UTF-16LE через собственные возможности cscript unicode и любой другой набор символов (включая UTF-8) через ADO.
    • чтение непосредственно из / запись непосредственно в файл: нет необходимости трубы, перенаправление или команда перемещения.
    • включить пользовательский JScript
    • средство перевода подобно unix tr, только оно также поддерживает поиск regex и JScript replace
    • отбросить несоответствующий текст
    • префикс выходных строк с номером строки
    • и многое другое.

    как всегда, полная документация встроена в сценарий.

    первоначальное тривиальное решение теперь даже проще:

    Я пишу сценарий пакетного файла, используя среду командной строки Windows, и хочу заменить каждое вхождение некоторого текста в файле (например, «FOO») другим (например, «BAR»). Какой самый простой способ сделать это? Есть встроенные функции?

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

    У меня Windows 7, которая поставляется со встроенным PowerShell. Вот скрипт, который я использовал для поиска / замены всех экземпляров текста в файле:

    Чтобы объяснить это:

    • powershell запускает powershell.exe, который входит в состав Windows 7
    • -Command ". " командная строка для powershell.exe, содержащая команду для запуска
    • (gc myFile.txt) читает содержимое myFile.txt ( gc сокращенно от Get-Content команды)
    • -replace 'foo', 'bar' просто запускает команду замены для замены foo на bar
    • | Out-File myFile.txt направляет вывод в файл myFile.txt
    • -encoding ASCII предотвращает расшифровку выходного файла в Unicode, как отмечают комментарии

    Powershell.exe уже должен быть частью вашего оператора PATH, но если нет, вы можете добавить его. Расположение его на моей машине C:\WINDOWS\system32\WindowsPowerShell\v1.0

    Осторожно, эта команда может также перекодировать файл в кодировку Unicode. Вы можете вручную указать кодировку, добавив -encoding ASCII или, UTF8 или что угодно. Также помните, что если вы нацелены на UTF8, в начале файла может появиться метка порядка байтов, которая не появилась в оригинале. @ Вайк Мне понадобилось время, чтобы понять, куда положить -encoding ASCII . Для любого, кто нуждается в этом в будущем, это будет Out-File -encoding ASCII myFile.txt Единственное, что мне пришлось изменить, - это использовать Set-Content вместо Out-File . Это работает, но производительность ужасна даже для небольшого списка файлов. Помните, что маркер замены (в данном случае 'foo') рассматривается как регулярное выражение. Если у вас есть какие-то специальные символы (у меня было []), вам нужно добавить их к \ (обратный слеш). Я вижу, что PowerShell способен архивировать это. Но как я могу выполнить этот запуск из командного файла (пример: myProc.bat)? @Pablo, используйте powershell.exe и оберните команду ps в один параметр -1 .. Конечно, ответ принят, но это не ответ на заданный вопрос. Это приведет к ошибке при использовании файла, если вы сохраните в тот же файл. Вам нужно изменить команду powershell на: (Get-Content test.txt) | ForEach-Object | Set-Content test.txt Смотрите ответ от @Rachel: powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | sc myFile.txt"

    Только что использованный FART ( утилита командной строки " F ind A nd R eplace T ext"):
    отличная бесплатная программа для замены текста в большом наборе файлов.

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

    Единственная проблема: иконка сайта FART не совсем со вкусом, изысканно или элегантно;)

    Обновление 2017 года (7 лет спустя) Jagb отмечает в комментариях к статье 2011 года « FARTing the Easy Way - найдите и замените текст » от Mikail Tunç

    Крутая вещь, это один единственный exe. Нет зависимостей. Нет маленьких отпечатков. Супер легко развернуть. Очень легкий и простой в использовании, но я надеялся, что он распечатает точные места замены. Невозможность увидеть это дала мне чувство незащищенности. Спасибо, это прекрасно, должно быть частью стандартных инструментов ДОС и сработало очарование. Опция -p, однако, не показывает, сколько изменений она «сделает», и всегда сообщает 0, что меня отбросило на несколько минут @jagb Спасибо. Я включил вашу ссылку в ответ для большей наглядности.

    Заменить - заменить подстроку с помощью подстановки строк. Описание: для замены подстроки другой строкой используйте функцию подстановки строк. Показанный здесь пример заменяет все вхождения «те» орфографические ошибки на «в» в строковой переменной str.

    Чем лучше предложение sed? Это, кажется, самый простой ответ из всех и ничего не требует установки. Можно ли здесь выполнить какое-либо сопоставление с образцом? Подстановочные знаки, регулярные выражения и т. Д.? "Как лучше предложение sed?" - sed и подобные утилиты работают с файлами; в этом фрагменте пропущен важный этап чтения строк из входного файла и записи в выходной файл, при этом гарантируется правильная обработка любых специальных символов в файле. @Asad, да, это правда, ОП спрашивал о файлах, но на самом деле он работает с потоками, которые не обязательно должны быть файлами. Но моя точка зрения заключается в том, что этот ответ ошибочен, так как он исключает чтение / запись из потока и обработку любых специальных символов.

    Создайте файл replace.vbs:

    Чтобы использовать этот пересмотренный скрипт (который мы будем называть replace.vbs), просто наберите в командной строке команду, похожую на эту:

    cscript replace.vbs "C:\Scripts\Text.txt" "Jim " "James "

    @ user280109 Да, VBScript поддерживает RegExp . Вы можете использовать это , чтобы заменить , используя регулярное выражение: With (New RegExp): strNewText = .Replace(strText, strOldText, strNewText): End With . Вы можете получить текст из первых 9 захватывающих групп , используя $1 , $2 . $9 . VBScript часто упускают из виду (и ненавидят), но он доступен на всех платформах Windows, очень удобочитаем и обладает очень мощными возможностями +1 @ user280109 Вы только что дали команду, Что мне нужно. Но я хочу заменить (без учета регистра). Можете ли вы предоставить команду для этого?

    Он использует комбинацию FOR , FIND и CALL SET .

    Строки, содержащие символы среди, "&<>]|^ могут быть обработаны неправильно.

    Это замечательно. Я люблю ответы, которые не включают загрузку чего-то другого, чтобы сделать это. Мне также нравятся решения, в которых не используются внешние утилиты, к сожалению, я продолжаю получать «find: invalid предикат` »при попытке запустить этот пакет. У меня нет времени на его отладку. Ошибка «find: invalid предиката» была вызвана внешней утилитой «find» в моей системе. После удаления это работало нормально.

    Примечание. Обязательно посмотрите обновление в конце этого ответа, чтобы найти ссылку на превосходный JREPL.BAT, который заменяет REPL.BAT JREPL.BAT 7.0 и более поздних
    версий, поддерживает Юникод (UTF-16LE) через эту /UTF опцию, а также любые другие. другой набор символов, включая UTF-8, через ADO .

    Я написал небольшую гибридную утилиту JScript / batch REPL.BAT, которая очень удобна для изменения файлов ASCII (или расширенного ASCII) через командную строку или пакетный файл. Чисто собственный сценарий не требует установки какого-либо стороннего исполняемого файла, и он работает на любой современной версии Windows начиная с XP. Это также очень быстро, особенно по сравнению с чистыми пакетными растворами.

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

    Вот тривиальный пример того, как заменить foo на bar в test.txt, если предположить, что REPL.BAT находится в вашей текущей папке или, что еще лучше, где-то в вашей переменной PATH:

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

    Я включил в утилиту ряд опций, которые делают ее довольно мощной. Например, объединяя M и X позволяет модифицировать двоичные файлы! M Вариант Многоканальный позволяет осуществлять поиск по нескольким линиям. Опция X шаблона замены eXtended предоставляет escape-последовательности, которые позволяют включать любое двоичное значение в текст замены.

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

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