Find найти и заменить строку: SED — Find and Replace a String in a File
Как использовать sed для поиска и замены строки в файлах
Довольно часто при работе с текстовыми файлами вам нужно находить и заменять строки текста в одном или нескольких файлах.
sed
может выполнять основные операции с текстом над файлами и входными потоками, такими как конвейеры. С sed
его помощью вы можете искать, находить и заменять, вставлять и удалять слова и строки. Он поддерживает базовые и расширенные регулярные выражения, которые позволяют сопоставлять сложные шаблоны.
Найти и заменить строку на
sed
Существует несколько версий sed
, с некоторыми функциональными различиями между ними. macOS использует версию BSD, и большинство дистрибутивов Linux поставляются с sed
предварительно установленной GNU по умолчанию. Мы будем использовать версию GNU.
Общая форма поиска и замены текста sed
принимает следующую форму:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-i
— По умолчаниюsed
записывает свой вывод на стандартный вывод. Эта опция говоритsed
редактировать файлы на месте. Если указано расширение (например, -i.bak), будет создана резервная копия исходного файла.s
— Команда замены, вероятно, наиболее используемая команда в sed./ / /
— разделитель персонажа. Это может быть любой символ, но обычно используется/
символ косой черты ( ).SEARCH_REGEX
— Обычная строка или регулярное выражение для поиска.REPLACEMENT
— Строка замены.g
— Глобальный флаг замены. По умолчаниюsed
файл читает построчно и изменяет только первое вхождениеSEARCH_REGEX
строки. Если указан флаг замены, все случаи будут заменены.INPUTFILE
— Имя файла, для которого вы хотите выполнить команду.
Хорошей практикой является размещение кавычек вокруг аргумента, чтобы метасимволы оболочки не расширялись.
Давайте посмотрим примеры того, как использовать sed
команду для поиска и замены текста в файлах с некоторыми из его наиболее часто используемых опций и флагов.
В демонстрационных целях мы будем использовать следующий файл:
file.txt
123 Foo foo foo
foo /bin/bash Ubuntu foobar 456
Если вы опустите g
флаг, будет заменен только первый экземпляр строки поиска в каждой строке:
sed -i 's/foo/linux/' file.txt
123 Foo linux foo
linux /bin/bash Ubuntu foobar 456
С глобальным флагом замены sed
заменяет все вхождения шаблона поиска:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux
linux /bin/bash Ubuntu linuxbar 456
Как вы могли заметить, в предыдущем примере подстрока foo
внутри foobar
строки также заменяется. Если это нежелательное поведение, используйте выражение word-boundery ( \b
) на обоих концах строки поиска. Это гарантирует, что отдельные слова не совпадают.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux
linux /bin/bash Ubuntu foobar 456
Чтобы сделать сопоставление с шаблоном нечувствительным к регистру, используйте I
флаг. В приведенном ниже примере мы используем как g
и I
флаги:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux
linux /bin/bash Ubuntu linuxbar 456
Если вы хотите найти и заменить строку, содержащую символ-разделитель ( /
), вам нужно использовать обратную косую черту ( \
), чтобы избежать косой черты. Например , чтобы заменить /bin/bash
с /usr/bin/zsh
вы будете использовать
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
Более простой и читаемый вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную черту ( |
) или двоеточие ( :
), но вы можете использовать любой другой символ:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo
foo /usr/bin/zsh Ubuntu foobar 456
Вы также можете использовать регулярные выражения. Например, чтобы найти все 3-значные числа и заменить их строкой, которую number
вы используете:
sed -i 's/\b[0-9]\{3\}\b/number/g' file.txt
number Foo foo foo
foo /bin/bash demo foobar number
Еще одна полезная функция sed — вы можете использовать символ амперсанда, &
который соответствует согласованному шаблону. Персонаж может быть использован несколько раз.
Например, если вы хотите добавить фигурные скобки {}
вокруг каждого трехзначного числа, введите:
sed -i 's/\b[0-9]\{3\}\b/{&}/g' file.txt
{123} Foo foo foo
foo /bin/bash demo foobar {456}
И последнее, но не менее важное: всегда полезно сделать резервную копию при редактировании файла с помощью sed
. Для этого просто предоставьте расширение -i
опции. Например, чтобы отредактировать file.txt
и сохранить исходный файл, как file.txt.bak
вы бы использовали:
sed -i.bak 's/foo/linux/g' file.txt
Если вы хотите убедиться, что резервная копия создана, перечислите файлы с помощью ls
команды:
ls
file.txt file.txt.bak
Рекурсивный поиск и замена
Иногда вы хотите рекурсивно искать в каталогах файлы, содержащие строку, и заменять строку во всех файлах. Это можно сделать с помощью таких команд, как grep
чтобы рекурсивно найти файлы в каталоге и передать имена файлов в sed
.
Следующая команда будет рекурсивно искать файлы в текущем рабочем каталоге и передавать имена файлов в sed
.
find . -type f -exec sed -i 's/foo/bar/g' {} +
Чтобы избежать проблем с файлами, содержащими пробел в их именах, используйте -print0
опцию, которая указывает find
печатать имя файла, за которым следует нулевой символ и направлять вывод в sed
использование xargs -0
:
find . -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Чтобы исключить каталог, используйте -not -path
опцию. Например, если вы заменяете строку в локальном git-репо, чтобы исключить все файлы, начинающиеся с точки ( .
), используйте:
find . -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
Если вы хотите искать и заменять текст только в файлах с определенным расширением, вы должны использовать:
find . -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Другой вариант — использовать grep
команду для рекурсивного поиска всех файлов, содержащих шаблон поиска, а затем передать имена файлов по адресу sed
:
grep -rlZ 'foo' . | xargs -0 sed -i.bak 's/foo/bar/g'
Вывод
Хотя это может показаться сложным и сложным, сначала поиск и замена текста в файлах sed
очень просты.
Чтобы узнать о более sed
команд, опции и флаги посетить GNU СЭД руководство и Grymoire СЭД учебник .
Как заменить строку в файле в Bash
Как программисту вам может потребоваться работать с разными типами файлов для временного или постоянного хранения данных. Иногда вам может потребоваться заменить часть файла или изменить конкретное содержимое файла. Чтобы заменить содержимое в файле, вы должны найти конкретную строку файла. Команда sed используется для замены любой строки в файле с помощью сценария bash. Эту команду можно использовать различными способами для замены содержимого файла в bash. Команда AWK также может быть использована для замены строки в файле. В этой статье показано, как заменить любое строковое значение из файла с помощью сценария bash. Для отображения операций замены создается текстовый файл с именем Sales.txt со следующим содержимым.
Sales.txt
Date Amount Area 01/01/2020 60000 AndreyEx 10/02/2020 76000 Maxim 21/03/2020 54000 Destroyer 15/04/2020 78000 Maria
Заменить строку в файле командой `sed`
Базовый синтаксис команды ‘sed’ для замены конкретной строки в файле приведен ниже.
Синтаксис
sed -i 's/search_string/replace_string/' filename
Каждая часть приведенного выше синтаксиса объясняется ниже.
Параметр ‘-i‘ используется для изменения содержимого исходного файла с заменой строки, если строка поиска существует в файле.
‘s‘ указывает заменяющую команду.
search_string содержит строковое значение, которое будет искать в файле для замены.
replace_string содержит строковое значение, которое будет использоваться для замены содержимого файла, соответствующего значению search_string .
‘filename‘ содержит имя файла, в котором будет применяться поиск и замена.
Пример 1: заменить файл командой sed
В следующем скрипте текст для поиска и замены будет взят у пользователя. Если строка поиска существует в Sales.txt, она будет заменена строкой замены. Здесь будет выполняться поиск с учетом регистра.
#!/bin/bash # Присвойте имя файла filename="Sales.txt" # Возьмите строку поиска read -p "Введите строку поиска: " search # Возьмите строку замены read -p "Введите строку замены: " replace if [[ $search != "" && $replace != "" ]]; then sed -i "s/$search/$replace/" $filename fi
Пример 2: Замена файла командой sed с флагом g и i
Следующий сценарий будет работать так же, как и предыдущий пример, но в строке поиска будет производиться глобальный поиск флага «g», а поиск без учета регистра будет выполняться для флага «i».
#!/bin/bash # Взять строку поиска read -p "Введите строку поиска: " search Взять строку замены read -p "Введите строку замены: " replace if [[ $search != "" && $replace != "" ]]; then sed -i "s/$search/$replace/gi" $1 fi
Пример 3. Замена файла командой sed и шаблоном совпадающих цифр
Следующий сценарий выполнит поиск всего числового содержимого в файле и заменит содержимое, добавив символ «$» в начале чисел.
#!/bin/bash # Проверить, существует ли значение аргумента командной строки или нет if [ $1 != "" ]; then # Поиск по всей строке, содержащей цифры, и добавление $ sed -i 's/\b[0-9]\{5\}\b/$&/g' $1 fi
Заменить строку в файле командой awk
Команда awk – это еще один способ заменить строку в файле, но эта команда не может обновить исходный файл напрямую, как команда sed.
Пример 4: заменить файл командой awk
Следующий скрипт сохранит обновленное содержимое в файле temp.txt, который будет переименован в исходный файл.
#!/bin/bash # Проверить, существует ли значение аргумента командной строки или нет if [ $1 != "" ]; then # Искать во всей строке по дате awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1 fi
Вывод
В этой статье показано, как использовать сценарии bash для замены определенных строк в файле. Задача по замене строки в файле станет для вас проще после отработки приведенных выше примеров.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Поиск и замена текста и выбор нескольких точек вставки — Visual Studio
-
- Чтение занимает 2 мин
В этой статье
С помощью элементов управления Поиск и замена (CTRL+F или CTRL+H) и Поиск и замена в файлах (CTRL+SHIFT+F или CTRL+SHIFT+H) можно найти и заменить текст в редакторе Visual Studio. Вы можете найти и заменить только несколько экземпляров текста с помощью выбора нескольких точек вставки.
Совет
Если необходимо переименовать символы кода, такие как имена переменных или методов, то вместо поиска и замены лучше выполнить рефакторинг. Рефакторинг обладает интеллектуальными возможностями и может распознавать области, в то время как функция поиска и замены слепо заменяет все вхождения.
Возможность поиска и замены доступна в редакторе, в некоторых других текстовых окнах (например, в результатах поиска), в окнах конструкторов (например, в конструкторе XAML и в конструкторе Windows Forms) и в окнах инструментов.
В качестве области поиска можно задать текущий документ, текущее решение или пользовательский набор папок. Вы также можете указать набор расширений имен файлов для поиска по нескольким файлам. Синтаксис поиска можно настроить с помощью регулярных выражений .NET.
Совет
Поле Найти/команда доступно как элемент управления панели инструментов, но оно не отображается по умолчанию. Чтобы отобразить поле Найти/команда, выберите на стандартной панели инструментов команду Добавить или удалить кнопки и щелкнув Найти.
Элемент управления «Поиск и замена»
- Нажмите CTRL+F для быстрого поиска строки в текущем файле.
- Нажмите CTRL+H для быстрого поиска и замены строки в текущем файле.
Элемент управления Поиск и замена отображается в правом верхнем углу окна редактора кода. Он немедленно выделяет все вхождения заданной поисковой строки в текущем документе. Вы можете переходить от одного вхождения к другому, нажав кнопку Найти далее или Найти предыдущий на элементе управления поиска.
Перейти к параметрам замены можно, нажав кнопку рядом с текстовым полем Найти. Чтобы изменять по одному вхождению за раз, выберите Заменить следующий рядом с текстовым полем Заменить. Чтобы заменить все найденные совпадения, нажмите кнопку Заменить все.
Чтобы изменить цвет выделения совпадений, в меню Сервис последовательно выберите Параметры, затем Среда, а затем Шрифты и цвета. В списке Показать параметры для выберите Текстовый редактор, а затем в списке Отображаемые элементы выберите Найти выделенный текст (расширение).
Окна инструмента поиска
Элемент управления Найти можно использовать в текстовых окнах и окнах кода, таких как окна вывода и результатов поиска, выбрав Правка > Поиск и замена (или нажав клавиши CTRL+F).
Версия элемента управления Найти также доступна в некоторых окнах инструментов. Например, можно фильтровать список элементов управления в окне панели элементов путем ввода текста в поле поиска. Другие окна инструментов, для которых поддерживается поиск содержимого, включают обозреватель решений, окно Свойства и Team Explorer.
Поиск и замена в файлах
- Нажмите CTRL+SHIFT+F для быстрого поиска строки в нескольких файлах.
- Нажмите CTRL+SHIFT+H для быстрого поиска и замены строки в нескольких файлах.
Функции Найти/Заменить в файлах аналогичны функциям элемента управления Поиск и замена за исключением того, что можно определить область поиска. Вы можете выполнить поиск не только в текущем открытом файле в редакторе, но также во всех открытых документах, всем решении, текущем проекте и выбранном наборе папок. Также можно выполнять поиск по расширению имени файла. Чтобы перейти к диалоговому окну поиска и замены в файлах, выберите Поиск и замена в меню Правка (или нажмите клавиши CTRL+SHIFT+F).
Результаты поиска
При выборе варианта Найти все откроется окно Результаты поиска со списком найденных совпадений. При выборе результата в списке отображается связанный файл и выделяется искомый текст. Если файл не открыт для редактирования, он открывается на вкладке предварительного просмотра в правой части набора вкладок. Для поиска в списке Результаты поиска можно использовать элемент управления Найти.
Создание пользовательских наборов папок поиска
Область поиска можно определить, нажав кнопку Выбор папок поиска (она выглядит как … ) рядом с полем Поиск в. В диалоговом окне Выбор папок поиска можно указать набор папок для поиска и сохранить спецификацию для дальнейшего использования.
Совет
Если к вашему компьютеру подключен диск удаленного компьютера, можно указать папки для поиска на удаленном компьютере.
Создание пользовательских наборов компонентов
В качестве области поиска можно определить наборы компонентов, нажав кнопку Изменить настраиваемый набор компонентов рядом с полем Поиск в. Можно указать установленные компоненты .NET и COM, проекты Visual Studio, включенные в решение, а также любые сборки или библиотеки типов (DLL, TLB, OLB, EXE или OCX). Для поиска ссылок выберите поле Искать по ссылкам.
Выбор нескольких точек вставки
Примечание
Этот раздел относится к Visual Studio в Windows. Информацию о Visual Studio для Mac см. в статье Выбор блока.
Новая возможность в Visual Studio 2017 версии 15.8
Используйте выбор нескольких точек вставки, чтобы внести одинаковые изменения в несколько мест одновременно. Например, вы можете вставить одинаковый текст или изменить существующий текст в нескольких местах одновременно.
На следующем снимке экрана -0000
выбран в трех местах. Если пользователь нажмет Удалить, все три фрагмента будут удалены:
Чтобы выбрать несколько точек вставки, выберите первый фрагмент текста обычным образом, а затем нажмите клавишу ALT и выберите фрагменты в других местах. Можно также автоматически добавить совпадающий текст в качестве дополнительного выделения или выбрать поле текста для внесения одинаковых правок в каждой строке.
Совет
Если вы выбрали ALT как клавишу-модификатор для команды «Перейти к определению» по щелчку мыши в меню Сервис > Параметры, функция выбора нескольких точек вставки недоступна.
Команды
Используйте следующие клавиши и действия для выбора нескольких точек вставки:
Клавиша | Действие |
---|---|
CTRL+ALT + щелчок | Добавить дополнительную точку вставки |
CTRL+ALT + двойной щелчок | Добавить дополнительное выделенное слово |
CTRL+ALT + щелчок + перетаскивание | Добавить дополнительный выделенный фрагмент |
SHIFT+ALT+ . | Добавить следующий совпадающий текст как выделенный фрагмент |
SHIFT+ALT+ ; | Выделить все совпадающие фрагменты текста |
SHIFT+ALT+ , | Удалить последний выделенный фрагмент |
SHIFT+ALT+ / | Пропустить следующий совпадающий фрагмент |
ALT + щелчок | Добавить выделенное поле |
ESC или щелчок | Отменить выбор всех элементов |
Некоторые команды также доступны в меню Изменить в разделе Несколько точек вставки:
См. также раздел
sed и обработка текстов / Блог компании RUVDS.com / Хабр
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
В прошлый раз мы говорили о функциях в bash-скриптах, в частности, о том, как вызывать их из командной строки. Наша сегодняшняя тема — весьма полезный инструмент для обработки строковых данных — утилита Linux, которая называется sed. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.
Если вы, в bash-скриптах, каким-то образом обрабатываете данные, вам не помешает знакомство с инструментами sed и gawk. Тут мы сосредоточимся на sed и на работе с текстами, так как это — очень важный шаг в нашем путешествии по бескрайним просторам разработки bash-скриптов.
Сейчас мы разберём основы работы с sed, а так же рассмотрим более трёх десятков примеров использования этого инструмента.
Основы работы с sed
Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил. Вот как выглядит схема вызова этой команды:
$ sed options file
По умолчанию sed применяет указанные при вызове правила, выраженные в виде набора команд, к STDIN
. Это позволяет передавать данные непосредственно sed.
Например, так:
$ echo "This is a test" | sed 's/test/another test/'
Вот что получится при выполнении этой команды.
Простой пример вызова sed
В данном случае sed заменяет слово «test» в строке, переданной для обработки, словами «another test». Для оформления правила обработки текста, заключённого в кавычки, используются прямые слэши. В нашем случае применена команда вида s/pattern1/pattern2/
. Буква «s» — это сокращение слова «substitute», то есть — перед нами команда замены. Sed, выполняя эту команду, просмотрит переданный текст и заменит найденные в нём фрагменты (о том — какие именно, поговорим ниже), соответствующие pattern1
, на pattern2
.
Выше приведён примитивный пример использования sed, нужный для того, чтобы ввести вас в курс дела. На самом деле, sed можно применять в гораздо более сложных сценариях обработки текстов, например — для работы с файлами.
Ниже показан файл, в котором содержится фрагмент текста, и результаты его обработки такой командой:
$ sed 's/test/another test' ./myfile
Текстовый файл и результаты его обработки
Здесь применён тот же подход, который мы использовали выше, но теперь sed обрабатывает текст, хранящийся в файле. При этом, если файл достаточно велик, можно заметить, что sed обрабатывает данные порциями и выводит то, что обработано, на экран, не дожидаясь обработки всего файла.
Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в STDOUT
. Для того, чтобы убедиться в том, что исходный файл не изменился, достаточно, после того, как он был передан sed, открыть его. При необходимости вывод sed можно перенаправить в файл, возможно — перезаписать старый файл. Если вы знакомы с одним из предыдущих материалов этой серии, где речь идёт о перенаправлении потоков ввода и вывода, вы вполне сможете это сделать.
Выполнение наборов команд при вызове sed
Для выполнения нескольких действий с данными, используйте ключ -e
при вызове sed. Например, вот как организовать замену двух фрагментов текста:
$ sed -e 's/This/That/; s/test/another test/' ./myfile
Использование ключа -e при вызове sed
К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего вводить каждое правило с новой строки, не забыв о закрывающей кавычке:
$ sed -e '
> s/This/That/
> s/test/another test/' ./myfile
Вот что получится после того, как команда, представленная в таком виде, будет выполнена.
Другой способ работы с sed
Чтение команд из файла
Если имеется множество команд sed, с помощью которых надо обработать текст, обычно удобнее всего предварительно записать их в файл. Для того, чтобы указать sed файл, содержащий команды, используют ключ -f
:
Вот содержимое файла mycommands
:
s/This/That/
s/test/another test/
Вызовем sed, передав редактору файл с командами и файл для обработки:
$ sed -f mycommands myfile
Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.
Использование файла с командами при вызове sed
Флаги команды замены
Внимательно посмотрите на следующий пример.
$ sed 's/test/another test/' myfile
Вот что содержится в файле, и что будет получено после его обработки sed.
Исходный файл и результаты его обработки
Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг.
Схема записи команды замены при использовании флагов выглядит так:
s/pattern/replacement/flags
Выполнение этой команды можно модифицировать несколькими способами.
- При передаче номера учитывается порядковый номер вхождения шаблона в строку, заменено будет именно это вхождение.
- Флаг
g
указывает на то, что нужно обработать все вхождения шаблона, имеющиеся в строке. - Флаг
p
указывает на то, что нужно вывести содержимое исходной строки. - Флаг вида
w file
указывает команде на то, что нужно записать результаты обработки текста в файл.
Рассмотрим использование первого варианта команды замены, с указанием позиции заменяемого вхождения искомого фрагмента:
$ sed 's/test/another test/2' myfile
Вызов команды замены с указанием позиции заменяемого фрагмента
Тут мы указали, в качестве флага замены, число 2. Это привело к тому, что было заменено лишь второе вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены — g
:
$ sed 's/test/another test/g' myfile
Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.
Глобальная замена
Флаг команды замены p
позволяет выводить строки, в которых найдены совпадения, при этом ключ -n
, указанный при вызове sed, подавляет обычный вывод:
$ sed -n 's/test/another test/p' myfile
Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в нашем случае — одна строка), в которых найден заданный фрагмент текста.
Использование флага команды замены p
Воспользуемся флагом w
, который позволяет сохранить результаты обработки текста в файл:
$ sed 's/test/another test/w output' myfile
Сохранение результатов обработки текста в файл
Хорошо видно, что в ходе работы команды данные выводятся в STDOUT, при этом обработанные строки записываются в файл, имя которого указано после w
.
Символы-разделители
Представьте, что нужно заменить /bin/bash
на /bin/csh
в файле /etc/passwd
. Задача не такая уж и сложная:
$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd
Однако, выглядит всё это не очень-то хорошо. Всё дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.
К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после s
:
$ sed 's!/bin/bash!/bin/csh!' /etc/passwd
В данном случае в качестве разделителя использован восклицательный знак, в результате код легче читать и он выглядит куда опрятнее, чем прежде.
Выбор фрагментов текста для обработки
До сих пор мы вызывали sed для обработки всего переданного редактору потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста — некую конкретную строку или группу строк. Для достижения такой цели можно воспользоваться двумя подходами:
- Задать ограничение на номера обрабатываемых строк.
- Указать фильтр, соответствующие которому строки нужно обработать.
Рассмотрим первый подход. Тут допустимо два варианта. Первый, рассмотренный ниже, предусматривает указание номера одной строки, которую нужно обработать:
$ sed '2s/test/another test/' myfile
Обработка только одной строки, номер который задан при вызове sed
Второй вариант — диапазон строк:
$ sed '2,3s/test/another test/' myfile
Обработка диапазона строк
Кроме того, можно вызвать команду замены так, чтобы файл был обработан начиная с некоей строки и до конца:
$ sed '2,$s/test/another test/' myfile
Обработка файла начиная со второй строки и до конца
Для того, чтобы обрабатывать с помощью команды замены только строки, соответствующие заданному фильтру, команду надо вызвать так:
$ sed '/likegeeks/s/bash/csh/' /etc/passwd
По аналогии с тем, что было рассмотрено выше, шаблон передаётся перед именем команды s
.
Обработка строк, соответствующих фильтру
Тут мы использовали очень простой фильтр. Для того, чтобы в полной мере раскрыть возможности данного подхода, можно воспользоваться регулярными выражениями. О них мы поговорим в одном из следующих материалов этой серии.
Удаление строк
Утилита sed годится не только для замены одних последовательностей символов в строках на другие. С её помощью, а именно, используя команду d
, можно удалять строки из текстового потока.
Вызов команды выглядит так:
$ sed '3d' myfile
Мы хотим, чтобы из текста была удалена третья строка. Обратите внимание на то, что речь не идёт о файле. Файл останется неизменным, удаление отразится лишь на выводе, который сформирует sed.
Удаление третьей строки
Если при вызове команды d
не указать номер удаляемой строки, удалены будут все строки потока.
Вот как применить команду d
к диапазону строк:
$ sed '2,3d' myfile
Удаление диапазона строк
А вот как удалить строки, начиная с заданной — и до конца файла:
$ sed '3,$d' myfile
Удаление строк до конца файла
Строки можно удалять и по шаблону:
$ sed '/test/d' myfile
Удаление строк по шаблону
При вызове d
можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними:
$ sed '/second/,/fourth/d' myfile
Удаление диапазона строк с использованием шаблонов
Вставка текста в поток
С помощью sed можно вставлять данные в текстовый поток, используя команды i
и a
:
- Команда
i
добавляет новую строку перед заданной. - Команда
a
добавляет новую строку после заданной.
Рассмотрим пример использования команды i
:
$ echo "Another test" | sed 'i\First test '
Команда i
Теперь взглянем на команду a
:
$ echo "Another test" | sed 'a\First test '
Команда a
Как видно, эти команды добавляют текст до или после данных из потока. Что если надо добавить строку где-нибудь посередине?
Тут нам поможет указание номера опорной строки в потоке, или шаблона. Учтите, что адресация строк в виде диапазона тут не подойдёт. Вызовем команду i
, указав номер строки, перед которой надо вставить новую строку:
$ sed '2i\This is the inserted line.' myfile
Команда i с указанием номера опорной строки
Проделаем то же самое с командой a
:
$ sed '2a\This is the appended line.' myfile
Команда a с указанием номера опорной строки
Обратите внимание на разницу в работе команд i
и a
. Первая вставляет новую строку до указанной, вторая — после.
Замена строк
Команда c
позволяет изменить содержимое целой строки текста в потоке данных. При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные:
$ sed '3c\This is a modified line.' myfile
Замена строки целиком
Если воспользоваться при вызове команды шаблоном в виде обычного текста или регулярного выражения, заменены будут все соответствующие шаблону строки:
$ sed '/This is/c This is a changed line of text.' myfile
Замена строк по шаблону
Замена символов
Команда y
работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными:
$ sed 'y/123/567/' myfile
Замена символов
Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя.
Вывод номеров строк
Если вызвать sed, использовав команду =
, утилита выведет номера строк в потоке данных:
$ sed '=' myfile
Вывод номеров строк
Потоковый редактор вывел номера строк перед их содержимым.
Если передать этой команде шаблон и воспользоваться ключом sed -n
, выведены будут только номера строк, соответствующих шаблону:
$ sed -n '/test/=' myfile
Вывод номеров строк, соответствующих шаблону
Чтение данных для вставки из файла
Выше мы рассматривали приёмы вставки данных в поток, указывая то, что надо вставить, прямо при вызове sed. В качестве источника данных можно воспользоваться и файлом. Для этого служит команда r
, которая позволяет вставлять в поток данные из указанного файла. При её вызове можно указать номер строки, после которой надо вставить содержимое файла, или шаблон.
Рассмотрим пример:
$ sed '3r newfile' myfile
Вставка в поток содержимого файла
Тут содержимое файла newfile
было вставлено после третьей строки файла myfile
.
Вот что произойдёт, если применить при вызове команды r
шаблон:
$ sed '/test/r newfile' myfile
Использование шаблона при вызове команды r
Содержимое файла будет вставлено после каждой строки, соответствующей шаблону.
Пример
Представим себе такую задачу. Есть файл, в котором имеется некая последовательность символов, сама по себе бессмысленная, которую надо заменить на данные, взятые из другого файла. А именно, пусть это будет файл newfile
, в котором роль указателя места заполнения играет последовательность символов DATA
. Данные, которые нужно подставить вместо DATA
, хранятся в файле data
.
Решить эту задачу можно, воспользовавшись командами r
и d
потокового редактора sed:
$ Sed '/DATA>/ {
r newfile
d}' myfile
Замена указателя места заполнения на реальные данные
Как видите, вместо заполнителя DATA
sed добавил в выходной поток две строки из файла data
.
Итоги
Сегодня мы рассмотрели основы работы с потоковым редактором sed. На самом деле, sed — это огромнейшая тема. Его изучение вполне можно сравнить с изучением нового языка программирования, однако, поняв основы, вы сможете освоить sed на любом необходимом вам уровне. В результате ваши возможности по обработке с его помощью текстов будет ограничивать лишь воображение.
На сегодня это всё. В следующий раз поговорим о языке обработки данных awk.
Уважаемые читатели! А вы пользуетесь sed в повседневной работе? Если да — поделитесь пожалуйста опытом.
Найти и заменить в Vim / Vi — Записи обо всём
Vim — самый популярный текстовый редактор командной строки. Он предустановлен в macOS и большинстве дистрибутивов Linux. Найти и заменить текст в Vim быстро и легко.
Базовый поиск и замена
В Vim вы можете найти и заменить текст с помощью команды :substitute
( :s
).
Чтобы запускать команды в Vim, вы должны находиться в обычном режиме — режиме по умолчанию при запуске редактора. Чтобы вернуться в обычный режим из любого другого режима, просто нажмите клавишу «Esc».
Общая форма заменяющей команды следующая:
:[range]s/{pattern}/{string}/[flags] [count]
Команда ищет в каждой строке [range]
щаблон {pattern}
и заменяет его на {string}
. [count]
раз (положительное целое число) повторяющее команду.
Если не указаны [range]
и [count]
, заменяется только образец, найденный в текущей строке. Текущая строка — это строка, в которой находится курсор.
Например, чтобы найти первое вхождение строки ‘foo’ в текущей строке и заменить его на ‘bar’, вы должны использовать:
:s/foo/bar/
Чтобы заменить все вхождения шаблона поиска в текущей строке, добавьте g
флаг:
:s/foo/bar/g
Если вы хотите найти и заменить шаблон во всем файле, используйте символ процента %
в качестве диапазона. (каретка) соответствует началу строки и .*
соответствует любому количеству любых символов.
Чувствительность к регистру
По умолчанию операция поиска чувствительна к регистру; поиск «FOO» не будет соответствовать «Foo».
Чтобы игнорировать регистр в шаблоне поиска, используйте i
флаг:
:s/Foo/bar/gi
Другой способ принудительно игнорировать регистр — это добавить c
после шаблона поиска.
Если вы изменили настройку регистра по умолчанию и хотите выполнять поиск с учетом регистра, используйте I
флаг:
:s/foo/bar/gI
Заглавные буквы C
после шаблона приводят к поиску совпадений по регистру.
Диапазон поиска
Если диапазон не указан, замещающая команда работает только в текущей строке.
Диапазон может быть одной строкой или диапазоном между двумя строками. Спецификаторы строки разделяются символами ,
или ;
. Диапазон можно указать с помощью абсолютного номера строки или специальных символов.
Например, чтобы заменить все вхождения ‘foo’ на ‘bar’ во всех строках, начиная со строки 3 по строку 10, вы должны использовать:
:3,10s/foo/bar/g
Диапазон является включительным, что означает, что первая и последняя строки включены в диапазон.
Точка .
обозначает текущую строку, а $
знак доллара — последнюю строку. Чтобы заменить ‘foo’ во всех строках, начиная с текущей строки до последней:
:.,$s/foo/bar/
Спецификатор строки также можно установить с помощью символа « » или «-», за которым следует число, которое добавляется или вычитается из номера предыдущей строки. Если число после символа опущено, по умолчанию используется 1.
Например, чтобы заменить каждое ‘foo’ на ‘bar’, начиная с текущей строки и четырех следующих строк, введите:
:., 4s/foo/bar/g
Замена всего слова
Команда замены ищет образец как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».
Чтобы отметить начало слова введите <
, введите >
чтобы отметить конец слова:
Например, для поиска слова «foo» вы должны использовать:
:s//bar/
История замены
Vim отслеживает все команды, которые вы выполняете в текущем сеансе. Чтобы просмотреть историю предыдущих команд замены, введите :s
и используйте клавиши со стрелками вверх/вниз, чтобы найти предыдущую операцию замены. Чтобы запустить команду, просто нажмите Enter
. Вы также можете отредактировать команду перед выполнением операции.
Примеры
Строки комментариев (добавить #
перед строкой) от 5 до 20:
:5,20s/^/#/
Раскомментируйте строки с 5 по 20, отмените предыдущие изменения:
:5,20s/^#//
Замените все экземпляры «яблоко», «апельсин» и «манго» на «фрукты»:
:%s/apple|orange|mango/fruit/g
Удалите завершающие пробелы в конце каждой строки:
:%s/s $//e
Найти и заменить—ArcGIS Pro | Документация
В этом разделе
Используйте элемент управления Найти и заменить , чтобы находить и изменять данные атрибутивной таблицы.
По умолчанию поиск осуществляется в выбранных полях. Вы можете вносить конкретные изменения в отдельные значения в итеративном процессе или обновлять несколько значений одновременно. Список самых последних записей сохраняется в полях ввода Найти и Заменить, пока проект не будет закрыт. Вы также можете указать метод поиска: соответствие любой части поля, всему полю или только началу поля, а также учет регистра. Поля дат, GUID и числовые всегда возвращают полное соответствие. Например, поиск значения 10 не найдет значение 100.
Поиск записей в таблице
Фрагмент Найти функции Найти и заменить сканирует таблицу и ищет совпадающие результаты. Это гораздо эффективнее ручного прокручивания таблицы и позволяет улучшить процесс работы с данными. Для того, чтобы найти запись в таблице, необходимо выполнить следующие действия:
- Щелкните меню Таблица и выберите Найти и заменить , чтобы открыть элемент управления в виде таблицы.
Или нажмите Ctrl+F, чтобы открыть это поле.
- Введите значение в поле Найти и нажмите
Enter, либо щелкните кнопку Найти .Для поиска нулевых значений, введите <Null> с учетом регистра.
Общее число найденных элементов будет показано рядом с кнопкой Очистить .
- Чтобы просмотреть результаты поиска, щелкните Найти следующий , либо нажмите комбинацию клавиш Shift+F3, либо щелкните Найти предыдущий , или нажмите F3.
Кнопки поиска работают в непрерывном циклическом режиме. Например, когда вы нажимаете Найти предыдущий и находится первый результат, ближайший к началу таблицы, поиск будет продолжен снизу вверх — до следующего совпадения.
- Чтобы выбрать все совпадения, щелкните Выбрать совпадения .
- Нажмите Закрыть , когда закончите работу, чтобы закрыть элемент управления, не закрывая вид таблицы.
Замена значений в ячейке таблицы
Замена всего или части значения ячейки позволяет выполнять повторяющиеся обновления без ручного редактирования и оптимизирует работу с данными.
Фрагмент Заменить функции Найти и заменить предназначена для небольших, прямых изменений значений, например, изменения значений Улица на Дорога. Воспользуйтесь Калькулятором поля для выполнения обновления, использующего сложные уравнения или ссылающегося на другие поля.
Чтобы изменить все значение ячейки или его часть, выполните следующие действия:
Опции для улучшения результатов
В зависимости от значения, которое вы хотите найти, можно включить дополнительное условие, которое позволит оптимизировать результаты поиска. Следующие три опции доступны в ниспадающем меню Найти:
- Сопоставить любую часть — может соответствовать любая часть значения ячейки, например, для текста San будет найдено и Pleasant, и San Gabriel. Это поведение по умолчанию.
- Сопоставить все поле — содержимое ячейки должно полностью соответствовать искомому значению.
- Сопоставить начало поля — должно совпадать начало ячейки, например, для текста San будет найдено и San Gabriel, и
san diego. - Учитывать регистр — должен соответствовать и текст, и регистр, например, тексту San будет соответствовать только строка San, а строка
san — нет. - Поиск только в выбранных полях — поиск будет осуществляться только в выбранных полях. Эта опция выбрана по умолчанию.
- Фильтр результатов — видны только те записи, которые возвращают совпадение; все остальные временно скрыты. Очистите результаты, чтобы снова просмотреть все записи.
Сопоставить любую часть, Сопоставить все поле и Сопоставить начало поля сохраняются в текущем проекте, в то время как другие параметры должны быть установлены для каждой таблицы.
Связанные разделы
Отзыв по этому разделу?
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
S = «s\np\ta\nbbb» | Экранированные последовательности |
S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
S = b»byte» | Строка байтов |
S1 + S2 | Конкатенация (сложение строк) |
S1 * 3 | Повторение строки |
S[i] | Обращение по индексу |
S[i:j:step] | Извлечение среза |
len(S) | Длина строки |
S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
S.rfind(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 |
S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError |
S.rindex(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError |
S.replace(шаблон, замена[, maxcount]) | Замена шаблона на замену. maxcount ограничивает количество замен |
S.split(символ) | Разбиение строки по разделителю |
S.isdigit() | Состоит ли строка из цифр |
S.isalpha() | Состоит ли строка из букв |
S.isalnum() | Состоит ли строка из цифр или букв |
S.islower() | Состоит ли строка из символов в нижнем регистре |
S.isupper() | Состоит ли строка из символов в верхнем регистре |
S.isspace() | Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’)) |
S.istitle() | Начинаются ли слова в строке с заглавной буквы |
S.upper() | Преобразование строки к верхнему регистру |
S.lower() | Преобразование строки к нижнему регистру |
S.startswith(str) | Начинается ли строка S с шаблона str |
S.endswith(str) | Заканчивается ли строка S шаблоном str |
S.join(список) | Сборка строки из списка с разделителем S |
ord(символ) | Символ в его код ASCII |
chr(число) | Код ASCII в символ |
S.capitalize() | Переводит первый символ строки в верхний регистр, а все остальные в нижний |
S.center(width, [fill]) | Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) |
S.count(str, [start],[end]) | Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) |
S.expandtabs([tabsize]) | Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам |
S.lstrip([chars]) | Удаление пробельных символов в начале строки |
S.rstrip([chars]) | Удаление пробельных символов в конце строки |
S.strip([chars]) | Удаление пробельных символов в начале и в конце строки |
S.partition(шаблон) | Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки |
S.rpartition(sep) | Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку |
S.swapcase() | Переводит символы нижнего регистра в верхний, а верхнего – в нижний |
S.title() | Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний |
S.zfill(width) | Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями |
S.ljust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar |
S.rjust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar |
S.format(*args, **kwargs) | Форматирование строки |
Найти и заменить текст — Word
Перейдите на Home > Замените или нажмите Ctrl + H.
Введите слово или фразу, которую хотите найти, в поле Найти .
Введите новый текст в поле Заменить .
Нажимайте Найти следующий , пока не дойдете до слова, которое хотите обновить.
Выбрать Заменить . Чтобы обновить все экземпляры сразу, выберите Заменить все .
Чтобы указать в поиске только заглавные или строчные буквы, выберите Еще > Учитывать регистр .
Другие параметры см. В разделе Найти и заменить текст
Найти и заменить основной текст
В правом верхнем углу документа в поле поиска.
, введите слово или фразу, которую вы хотите найти, и Word выделит все вхождения слова или фразы в документе.
Для замены найденного текста:
Выберите увеличительное стекло, а затем выберите Заменить .
В поле Заменить на введите текст замены.
Выбрать Заменить все или Заменить .
Советы:
Вы также можете открыть базовую панель Найти и заменить с помощью сочетания клавиш CONTROL + H.
При замене текста рекомендуется выбрать Заменить вместо Заменить все . Таким образом вы сможете просмотреть каждый элемент перед его заменой.
Вы можете найти текст со специальным форматированием, например полужирным или выделенным, с помощью меню Формат .
Выберите Просмотр > Панель навигации .
В области навигации выберите увеличительное стекло.
Выбрать настройки
, а затем выберите Advanced Find & Replace .
В меню Формат выберите нужный вариант.
Если откроется второе диалоговое окно, выберите нужные параметры, а затем выберите ОК .
В диалоговом окне Найти и заменить выберите Найти далее или Найти все .
Вы можете найти и заменить текст с помощью специального форматирования, такого как полужирный или выделенный, с помощью меню Формат .
Выберите Просмотр > Панель навигации .
В области навигации выберите увеличительное стекло.
Выбрать настройки
, а затем выберите Advanced Find & Replace .
В верхней части диалогового окна выберите Заменить .
В поле Найдите то, что , введите текст, который вы хотите найти.
В меню Формат выберите форматирование, которое вы хотите найти.
Если откроется второе диалоговое окно, выберите нужные параметры, а затем выберите ОК .
Установите флажок рядом с Заменить на .
В меню Формат выберите форматирование замены. Если появится второе диалоговое окно, выберите нужные форматы, а затем выберите OK .
Выбрать Заменить , Заменить все или Найти следующий .
Выберите Просмотр > Панель навигации .
В области навигации выберите увеличительное стекло.
Выбрать настройки
, а затем выберите Advanced Find & Replace .
В меню Special выберите специальный символ, который хотите найти.
Выбрать Найти следующий .
Выберите Просмотр > Панель навигации .
В области навигации выберите увеличительное стекло.
Выбрать настройки
, а затем выберите Advanced Find & Replace .
В верхней части диалогового окна «Найти и заменить » выберите Заменить , а затем выберите в поле «Найти », но ничего там не вводите.Позже, когда вы выберете специальный символ, Word автоматически поместит код символа в поле для вас.
Примечание: Щелкните стрелку в нижней части диалогового окна «Найти и заменить» , чтобы отобразить все параметры.
В меню Special выберите специальный символ, который хотите найти.
Выберите в поле Заменить на .
В меню Special выберите специальный символ, который вы хотите использовать в качестве замены.
Выбрать Заменить или Найти следующий .
Выберите Просмотр > Панель навигации .
В области навигации выберите увеличительное стекло.
Выбрать настройки
, а затем выберите Advanced Find & Replace .
Установите флажок Использовать подстановочные знаки .
Если вы не видите флажок Использовать подстановочные знаки , выберите
.
Выберите меню Special , выберите подстановочный знак, а затем введите любой дополнительный текст в поле Find what .
Выбрать Найти следующий .
Советы:
Чтобы отменить текущий поиск, нажмите
+ ПЕРИОД.
Вы также можете ввести подстановочный знак непосредственно в поле Find what вместо выбора элемента во всплывающем меню Special .
Для поиска символа, определенного как подстановочный знак, введите перед ним обратную косую черту (\). Например, введите \? , чтобы найти вопросительный знак.
Вы можете использовать круглые скобки для группировки подстановочных знаков и текста, а также для указания порядка оценки.Например, выполните поиск по запросу <(pre) * (ed)> , чтобы найти «предварительно отсортировано» и «заблокировано».
Вы можете найти выражение и использовать подстановочный знак \ n , чтобы заменить строку поиска измененным выражением. Например, введите (Newman) (Belinda) в поле Find what и \ 2 \ 1 в поле Replace with .Word найдет «Newman Belinda» и заменит его на «Belinda Newman».
Для замены найденного текста:
Выберите вкладку Заменить , а затем выберите поле Заменить на .
Выберите Special , выберите подстановочный знак, а затем введите любой дополнительный текст в поле Заменить на .
Выбрать Заменить все , Заменить или Найти следующий .
Совет: При замене текста рекомендуется выбрать Заменить вместо Заменить все . Таким образом вы сможете подтвердить каждую замену, чтобы убедиться в ее правильности.
Вы можете уточнить поиск, используя любой из следующих подстановочных знаков.
Найти | Используйте это | Например |
---|---|---|
Любой одиночный символ | ? | s? T находит «sat» и «set».« |
Любая строка символов | * | s * d находит «грустно» и «началось». |
Один из указанных символов | [] | w [io] n находит «выиграл» и «выиграл».« |
Любой одиночный символ в этом диапазоне | [-] | [r-t] ight находит «правый», «прицел» и «плотный». Диапазоны должны быть в порядке возрастания. |
Любой одиночный символ, кроме символов внутри скобок | [!] | м [! A] st находит «туман» и «большую», но не «мачту».« |
Любой одиночный символ, кроме символов в диапазоне внутри скобок | [! X-z] | t [! A-m] ck находит «tock» и «tuck», но не «tack» или «tick».« Диапазоны должны быть в порядке возрастания. |
Ровно n вхождений символа или выражения | { n } | fe {2} d находит «корм», но не «подано».« |
Не менее n вхождений символа или выражения | { n, } | fe {1,} d находит «корм» и «корм».« |
Диапазон вхождений символа или выражения | { n , n } | 10 {1,3} находит «10», «100» и «1000».« |
Одно или несколько вхождений символа или выражения | @ | lo @ t находит «жребий» и «лут». |
Начало слова | < | <(inter ) находит «интересный» и «перехватывающий», но не «расколотый».« |
Конец слова | > | (in)> находит «внутри» и «внутри», но не «интересно». |
Веб-приложение Word позволяет находить и заменять основной текст.Вы можете использовать только регистр или слова целиком. Чтобы получить дополнительные возможности, откройте документ в Word для рабочего стола.
Поиск и замена текста с помощью регулярных выражений
Если вы хотите найти и заменить определенные шаблоны текста, используйте регулярные выражения. Они могут помочь вам в сопоставлении с образцом, синтаксическом анализе, фильтрации результатов и т. Д. Изучив синтаксис регулярного выражения, вы сможете использовать его практически для любого языка.
Нажмите Ctrl + R , чтобы открыть панель поиска и замены.
Если вам нужно найти и заменить более чем в одном файле, нажмите Ctrl + Shift + R .
Введите строку поиска в верхнее поле и строку замены в нижнее поле.
Щелкните, чтобы включить регулярные выражения. Если вы хотите проверить синтаксис регулярных выражений, наведите указатель мыши на ссылку Показать справку по выражениям и нажмите.
Когда вы ищете текстовую строку, содержащую специальные символы регулярного выражения, PhpStorm автоматически экранирует их с помощью люфта
\
в поле поиска.$ |? * + , вам нужно экранировать их с помощью обратной косой черты\
, чтобы их можно было распознать.Например, если вам нужно найти
.
, тип\.
в поле поиска.PhpStorm также может соответствовать регистру букв, когда вы вводите диапазон символов в поле поиска.
Например, если вы хотите искать только символы верхнего регистра, введите в поле поиска следующее:
\ b [A-Z]
Для поиска и замены более сложных шаблонов используйте структурный поиск и замену.
Если этот параметр не выбран в поле поиска, PhpStorm выполняет поиск как в нижнем, так и в верхнем регистре.
Выберите в поле поиска соответствие регистру указанного диапазона.
Когда вы просматриваете вхождения, PhpStorm отображает подсказки для замены, поэтому вы можете просмотреть потенциальные результаты, прежде чем нажимать кнопку «Заменить».
Дополнительные сведения см. В синтаксисе RegEx.
Использовать группы захвата регулярных выражений и обратные ссылки
Вы можете поместить регулярные выражения в скобки, чтобы сгруппировать их.Каждая группа имеет номер, начинающийся с 1, поэтому вы можете ссылаться на них (обратная ссылка) в своем шаблоне замены. Обратите внимание, что группа 0 относится ко всему регулярному выражению. Однако вы можете ссылаться на захваченную группу не только по номеру $ n
, но и по имени $ {name}
.
Например, для пронумерованных групп захвата используйте следующий синтаксис:
Для именованных групп захвата используйте следующий синтаксис:
Найти и заменить захваченную группу
Рассмотрим следующий код:
Открыть панель поиска и замены Ctrl + R .
В поле поиска введите круглые скобки
()
, которые укажут группу захвата, например:\ svalue = "(. *)?" \ S * (> *)
.В поле замены укажите обратную ссылку на такие группы по номерам, начинающимся с 1, например:
placeholder = "$ 1"
PhpStorm выделяет найденные вхождения на основе ваших спецификаций поиска и отображает подсказки со строкой замены.
Изменение регистра символов
Вы можете использовать регулярные выражения для изменения регистра символов, соответствующих некоторым критериям.
Открыть панель поиска и замены Ctrl + R . Убедитесь, что в поле поиска выбрано.
В поле поиска введите шаблон поиска.
В поле замены, в зависимости от того, чего вы хотите добиться, введите один из следующих синтаксисов:
\ l
изменяет регистр символа на нижний регистр до следующего символа в строке.
Например,Бар
становитсябар
.\ u
переводит символ в верхний регистр до следующего символа в строке.
Например,бар
становитсяБар
.\ L
переводит символы в нижний регистр до конца буквальной строки\ E
.
Например,BAR
становитсяbar
.\ U
переводит символы в верхний регистр до конца буквальной строки\ E
.
Например,bar
становитсяBAR
.
Дополнительные сведения см. В справочной таблице по синтаксису RegEx.
Последнее изменение: 8 марта 2021 г.
Поиск и замена в текстовых файлах с помощью UltraEdit
UltraEdit и UEStudio обладают мощными функциями поиска и замены для поиска и замены текста в одном или нескольких текстовых файлах. Существует несколько настроек и опций, которые позволяют настроить поиск по конкретным типам файлов, файлам проектов, каталогам файлов и т. Д.Используя эти доступные инструменты, вы можете настроить поиск или замену, чтобы быстро вносить изменения в текст или код в каталоге файлов или находить уникальную строку в одном файле, скрытом в сотнях других файлов, и даже находить файлы, которые не используются . ‘t содержит определенную строку.
Поскольку функции поиска и замены являются неотъемлемой частью любого редактора, вы можете найти эти параметры на вкладке «Главная» ленты в группе «Поиск».
Вы можете искать в активном файле с опцией «Найти».Как только вы выберете эту опцию, откроется диалоговое окно «Найти». Здесь вы можете ввести нашу строку поиска, а также указать другие параметры поиска. Для быстрого поиска введите то, что вы ищете, и нажмите Далее . (Примечание : Вы также можете нажать Ctrl + F , чтобы открыть «Быстрый поиск», который позволяет быстро искать строку в меньшем всплывающем окне, во многом аналогично функции поиска в веб-браузерах.)
Первая найденная строка будет выделена в файле.(Если вы не хотите, чтобы диалоговое окно поиска закрывалось после нажатия Далее , откройте его снова, нажав Ctrl + F , F , затем щелкните значок шестеренки и снимите флажок «Закрыть после поиска». Затем вы можете просмотреть все вхождения строки в файле, нажав F3 , что приведет вас к следующему найденному экземпляру. Нажмите Ctrl + F3 , чтобы перейти к предыдущему экземпляру.
Подсчитать все
Эта кнопка подсчитывает количество вхождений вашей строки поиска в активный файл.Счетчик отображается рядом со значком шестеренки прямо в диалоговом окне «Найти».
В:
- Текущий файл — Если вы выберете эту опцию, UltraEdit / UEStudio ограничит поиск активным файлом.
- Выделенный текст — Если вы выберете эту опцию, UltraEdit / UEStudio будет искать только в активном выделенном тексте.
- Все открытые файлы — Если вы выберете эту опцию, повторение команды поиска следующего (либо с помощью кнопки Next , либо с помощью кнопки F3 ) продолжит циклический просмотр всех других открытых файлов после завершения поиска по активному файлу.
Щелкните значок шестеренки , чтобы отобразить несколько параметров и настроек для поиска. Мы рассмотрим это ниже.
Соответствует целому слову
UltraEdit не ограничивает поиск только соответствием целых слов. Эта опция ограничивает поиск только целыми словами; например, слова, заключенные в пробел. Например, вы можете использовать эту опцию, чтобы искать букву «а» или «А» отдельно, без совпадения слов, содержащих «а».
Что определяет целое слово? Целое слово — это последовательность из одного или нескольких буквенно-цифровых (a-z и 0-9) или символов подчеркивания (_).Любой другой символ не считается «словесным» символом. Вы должны использовать эту опцию только , если строка, которую вы ищете, состоит только из словесных символов.
Спичечный футляр
По умолчанию ваш поиск не чувствителен к регистру. Выбор этого параметра приведет к тому, что UltraEdit будет возвращать только результаты, которые являются точным совпадением регистра вашей строки поиска.
Регулярные выражения
Поиск по регулярному выражению позволяет вам искать строки, которые отличаются, но все же соответствуют определенному шаблону.Например, строка поиска «<. *>» С включенными регулярными выражениями Perl будет соответствовать всем строкам , которые начинаются с «<» и заканчиваются «>», с любым количеством любых символов, не являющихся символами новой строки между ними.
Символ «.» в нашей строке поиска указывает UltraEdit найти любой символ, не являющийся новой строкой, а символ «*» квалифицирует это, сообщая UltraEdit искать его и сопоставлять 0 или более раз. Следовательно, будут сопоставлены все следующие строки:
Однако следующая строка не будет найдена, поскольку она содержит разрыв строки (новую строку). В то время как «.» символ будет соответствовать любому символу, он не будет соответствовать разрыву строки.
"http://www.w3.org/TR/xhtml1/DTD/strict.dtd">
Вы можете узнать больше о регулярных выражениях Perl (это тип регулярных выражений, которые мы рекомендуем использовать нашим пользователям) в любом из следующих полезных советов:
Вы также можете просмотреть документацию по регулярным выражениям Perl на нашей вики.
Выделить все найденные элементы
Эта опция приведет к тому, что все элементы, соответствующие строке поиска, будут выделены, как только вы нажмете кнопку Далее . (Примечание : Вы также можете добиться этого эффекта, используя Shift + , дважды щелкнув , чтобы выбрать слово, или нажав Ctrl + период , чтобы выделить все экземпляры слова под кареткой.)
Список строк, содержащих строку
Если этот параметр выбран, как только вы нажмете Далее , откроется список строк поиска со списком всех строк в активном файле, которые содержат строку поиска.Вы можете дважды щелкнуть результат в этом списке, чтобы перейти к его местоположению в активном файле.
В колонке
Этот параметр позволяет ограничить поиск определенным диапазоном столбцов в каждой строке. Для получения дополнительной информации об этой функции прочтите совет по поиску и замене в столбцах.
Трубопроводы фильтра
Если вы отметите эту опцию, то станут доступными кнопки «Показать» и «Скрыть». Если вы выберете «Показать», а затем нажмите Далее , все строки, не содержащие строку «Найти что», будут скрыты, и будут видны только строки, содержащие совпадение.И наоборот, если вы выберете «Скрыть», будут показаны только строки, содержащие совпадение со строкой «Найти что», а все остальные строки будут скрыты.
История недавнего поиска
Вы можете циклически просмотреть свою недавнюю историю поиска, выделив весь текст в поле «Найти» и нажав стрелку вверх / вниз на клавиатуре .. Кроме того, вы можете нажать кнопку истории чуть выше » Найдите поле для просмотра и выберите элемент из истории поиска.
Существует также полезный элемент, доступный вам, если вы хотите получить доступ к истории поиска, не открывая диалоговое окно «Найти». Вы можете добавить выпадающий список истории поиска на ленту, панель инструментов или панель быстрого доступа, чтобы иметь возможность прокручивать историю поиска, выбирать элемент, а затем нажимать F3 для его поиска. Чтобы добавить это, щелкните правой кнопкой мыши ленту, панель инструментов или панель быстрого доступа и выберите параметр Настроить . В списке «Выбрать команды из» выберите «Все команды».Найдите строку поиска в раскрывающемся списке рядом с ней и нажмите кнопку Добавить », чтобы добавить ее.
В раскрывающемся списке истории поиска вы можете выбрать нужный текст для поиска и нажать Введите , чтобы найти его, затем нажмите F3 , чтобы найти следующие вхождения, и все это без открытия диалогового окна поиска. Вы также можете ввести новую строку для поиска и нажать Введите , чтобы вызвать поиск.
Искать в избранном
Кнопка со звездочкой в диалоговом окне поиска и замены позволяет получить доступ к вашим любимым строкам поиска.Это может быть особенно полезно для сложных шаблонов регулярных выражений. Чтобы использовать элемент, хранящийся в списке избранного поиска, просто нажмите кнопку со звездочкой и перейдите к элементу Избранное , затем выберите элемент. На скриншоте ниже мы получаем доступ к избранному поисковому запросу с именем , поэтому имя (а не сама строка поиска) — это то, что отображается в списке.
Вы можете узнать больше о поиске в избранном в нашей полезной подсказке.
Параметр Заменить на вкладке «Главная» ленты открывает диалоговое окно замены.Вы также можете нажать Ctrl + R , чтобы открыть замену.
Вы, наверное, заметили, что поиск, замена, поиск в файлах и замена в файлах имеют одно и то же окно, и что вы можете щелкать вкладки для переключения между этими режимами поиска. Это полезно, так как часто вы можете найти строку, а затем решить, что хотите заменить эту строку в файле чем-то другим. Вы можете щелкнуть вкладку «Заменить», и ваша строка поиска будет перенесена в поле «Найти» для замены.
Есть несколько вариантов настройки поиска в диалоговом окне замены. Для наших целей мы выполним простой поиск и замену, заменив все вхождения слова «цвет» на «цвет», как показано ниже.
Нажмите Заменить все , чтобы немедленно заменить все экземпляры строки. Однако в этом случае мы хотим видеть каждое из наших совпадений, прежде чем заменять их. Для этого вместо этого мы нажмем кнопку Далее . Это переместится к первому вхождению строки поиска и выберет его.Затем мы можем нажать Заменить , чтобы заменить это вхождение. Затем UltraEdit автоматически переходит к следующему вхождению.
Вы заметите, что индикатор изменения строки отображается рядом с номером строки, в которой произошла замена. Индикатор изменения строки помогает визуально проверить, где в файле были изменения (сохраненные и несохраненные). Это очень полезно, особенно при выполнении операции «Заменить все», чтобы вы могли видеть строки, в которых была произведена замена.
Есть некоторые дополнительные уникальные настройки, которые необходимо заменить, о которых мы поговорим позже.Вы можете увидеть их, нажав кнопку шестеренка . Параметры «В:», «Соответствовать всему слову», «Учитывать регистр», «Регулярные выражения» и «В столбце» работают так же, как в диалоговом окне поиска, как описано выше, поэтому мы не будем повторять эту информацию. .
Защитный футляр
Параметр сохранения регистра будет соответствовать регистру заменяемой строки и регистру найденной строки. Для этого применяются следующие правила:
- Если слово найдено в нижнем регистре, заменяемое слово будет полностью в нижнем регистре
- Если все найденное слово набрано ЗАПИСНЫМИ буквами, заменяемое слово будет полностью ЗАПИСНЫМИ
- Если найдено слово MixedCase, заменяющее слово будет СООТВЕТСТВОВАТЬ регистру заменяющего слова.
Например, если выбран этот параметр, и вы выполните поиск «The» и замените его на «Then», произойдет следующая замена:
- «то» будет заменено на «затем»
- «THE» будет заменено на «THEN»
- «The» будет заменено на «Then»
Заменить все сверху файла
Если этот флажок установлен, замена начнется с начала активного файла, а не с текущей позиции курсора.Этот параметр важен, потому что без него « Заменить все » потенциально может пропустить вхождение, которое находится над активным файлом.
Закройте после замены всех
Если выбрана эта опция, диалоговое окно закроется после выполнения команды.
Вы можете увидеть опцию Найти / заменить в файлах на вкладке «Главная», рядом с другими опциями поиска. Вы также можете найти в файлах, нажав Ctrl + Shift + F .Найти и заменить в файлах — это мощные параметры поиска, которые позволяют искать строки или текст в нескольких файлах, содержащихся в каталоге.
В нашем примере мы хотели бы найти все вхождения внешнего связанного сценария во всех наших HTML-файлах, поэтому мы установим строку поиска на «