[ ЧИТАЙТЕ | Руководство пользователя | Индексирование | Тесты | Вопросы и ответы ]
опция -Q открывает запрос TUI для поиска файлов по мере ввода!
Ugrep быстрый, удобный и оснащен множеством новых функций, которые нужны пользователям.
включает в себя интерактивный TUI со встроенной справкой, поиск в стиле Google с шаблонами И/ИЛИ/НЕ, нечеткий поиск, поиск (вложенных) архивов zip/7z/tar/pax/cpio, архивов и сжатых файлов gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, поиск двоичных файлов и шестнадцатеричный дамп, поиск документов, таких как PDF, doc, docx, и вывод в формате JSON, XML, CSV или ваш собственный формат.
Расширенный синтаксис шаблона регулярных выражений Unicode с многострочным сопоставлением шаблонов без необходимости использования специальных параметров командной строки.
включает индексатор файлов для ускорения поиска в медленных и холодных файловых системах
настоящая замена GNU grep (при условии, что вы копируете или символизируете ссылку ug
на grep
, egrep
и fgrep
), в отличие от других популярных grep, претендующих на звание «альтернативы grep» или «замен», когда они на самом деле реализуют несовместимую командную строку параметры и использовать несовместимое средство сопоставления регулярных выражений, т. е. только регулярное выражение Perl вместо POSIX BRE (grep) и ERE (egrep), когда ugrep поддерживает все режимы регулярных выражений
тесты показывают, что ugrep является (одним из) самых быстрых grep, использующих высокопроизводительный механизм сопоставления регулярных выражений на основе DFA RE/flex.
если что-то надо улучшить или добавить в ugrep, то дайте знать!
Приоритетом №1 является обеспечение качества, чтобы гарантировать отсутствие ошибок и надежность Ugrep.
заставить ugrep работать еще быстрее, см., например, #432, #421
делиться воспроизводимыми результатами производительности
ug
предназначен для интерактивного использования, при котором загружается дополнительный файл конфигурации .ugrep с вашими предпочтениями, расположенный в рабочем или домашнем каталоге. ug+
также ищет PDF-файлы, документы, электронные книги, метаданные изображений.
ugrep
для пакетного использования, как GNU grep, без файла конфигурации .ugrep, ugrep+
также ищет PDF-файлы, документы, электронные книги, метаданные изображений.
По умолчанию соответствует шаблонам Unicode и автоматически ищет файлы в кодировке UTF-8, UTF-16 и UTF-32.
Соответствует нескольким строкам с n
или R
в шаблонах регулярных выражений, для этого не требуются специальные параметры!
Встроенная справка: ug --help
, где ug --help WHAT
отображает параметры, связанные с WHAT
вы ищете.
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
.
Удобство для пользователя благодаря настраиваемым файлам конфигурации, используемым командой ug
предназначенным для интерактивного использования и загружающим файл конфигурации .ugrep с вашими предпочтениями.
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
сохраняет файл конфигурации .ugrep в рабочем каталоге, чтобы при следующем запуске ug
там использовались эти параметры. Сделайте это в своем домашнем каталоге, чтобы сохранить файл конфигурации .ugrep с параметрами, которые вы обычно хотите использовать.
Интерактивный интерфейс запроса, нажмите F1 или CTRL-Z для получения справки и TAB/SHIFT-TAB для перехода к каталогам и файлам.
ug -Q ug -Q -e PATTERN
-Q
заменяет PATTERN
в командной строке, позволяя вам вводить шаблоны в интерактивном режиме в TUI. В TUI используйте клавиши ALT+буквы для включения/выключения коротких «буквенных опций», например ALT-n (опция -n
), чтобы показать/скрыть номера строк.
Поиск по содержимому архивов (zip, tar, pax, jar, cpio, 7z) и сжатых файлов (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
укажите -z --zmax=2
для поиска сжатых файлов и архивов, вложенных в архивы. Аргумент --zmax
может иметь значение от 1 (по умолчанию) до 99, что дает до 99 шагов распаковки и разархивирования для поиска во вложенных архивах.
Поиск с помощью шаблонов логических запросов, подобных Google, с использованием шаблонов -%
с AND
(или просто пробелом), OR
(или чертой |
), NOT
(или тире -
), использованием кавычек для точного соответствия и группировкой с помощью ( )
(показано на левая сторона внизу); или с опциями -e
(как «или»), --and
, --andnot
и --not
шаблоны регулярных выражений (показаны справа ниже):
ug -% 'A B C' ... ug -e 'A' --and 'B' --and 'C' ...
ug -% 'A|B C' ... ug -e 'A' -e 'B' --and 'C' ...
ug -% 'A -B -C' ... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% 'A -(B|C)'... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% '"abc" "def"' ... ug -e 'QabcE' --and 'QdefE' ...
где A
, B
и C
— произвольные шаблоны регулярных выражений (используйте опцию -F
для поиска строк)
укажите опцию -%%
( --bool --files
), чтобы применить логический запрос к файлам в целом: файл соответствует, если все логические условия удовлетворяются путем сопоставления шаблонов во всем файле. В противном случае логические условия по умолчанию применяются к одиночным строкам, поскольку утилиты grep обычно сопоставляют шаблоны на основе строк. Опция --stats
отображает запрос в удобочитаемой форме после завершения поиска.
Выполняйте поиск в PDF-, doc-, docx-, электронных книгах и других документах с помощью ug+
используя фильтры, связанные с расширениями имен файлов:
ug+ PATTERN ...
или укажите --filter
с типом файла, чтобы использовать утилиту фильтра:
ug --filter='pdf:pdftotext % -' PATTERN ...
ug --filter='doc:antiword %' PATTERN ...
ug --filter='odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -' PATTERN ...
ug --filter='odt,doc,docx,rtf,xls,xlsx,ppt,pptx:soffice --headless --cat %' PATTERN ...
ug --filter='pem:openssl x509 -text,cer,crt,der:openssl x509 -text -inform der' PATTERN ...
ug --filter='latin1:iconv -f LATIN1 -t UTF-8' PATTERN ...
команда ug+
аналогична команде ug
, но также использует фильтры для поиска PDF-файлов, документов и метаданных изображений.
Отобразите горизонтальный контекст с помощью опции -o
( --only-matching
) и опций контекста -ABC
, например, для поиска совпадений в очень длинных строках, таких как источники Javascript и JSON:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
подбирает все совпадения с контекстом длиной 20 символов до и 20 символов после совпадения (т.е. всего 40 символов Юникода), -nk
выводит номера строк и столбцов.
Найдите приблизительные совпадения с образцом с помощью нечеткого поиска в пределах указанного расстояния Левенштейна.
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
соответствует до n
дополнительных, отсутствующих или замененных символов, -Z+n
соответствует до n
дополнительных символов, -Zn
соответствует до n
пропущенных символов и -Z~n
соответствует до n
замененных символов. -Z
по умолчанию равен -Z1
.
Fzf-подобный поиск с регулярным выражением (или фиксированными строками с -F
), нечеткое сопоставление до 4 дополнительных символов с -Z+4
и только слова с -w
, использование -%%
для логического поиска по всему файлу
ug -Q -%% -l -w -Z+4 --sort=best
-l
выводит список совпадающих файлов в TUI, нажмите TAB
затем ALT-y
, чтобы просмотреть файл, SHIFT-TAB
и Alt-l
, чтобы вернуться назад, чтобы просмотреть список совпадающих файлов, упорядоченный по наилучшему совпадению.
Поиск двоичных файлов и отображение шестнадцатеричных дампов с совпадениями с двоичным шаблоном (текст Unicode или -U
для байтовых шаблонов)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
отображает 4
шестнадцатеричных столбца без символьного столбца c
, без шестнадцатеричного интервала h
и с одной дополнительной шестнадцатеричной строкой C1
до и после совпадения.
Включите файлы для поиска по типам файлов или «магическим байтам» файлов или исключите их с помощью ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
Включите для поиска файлы и каталоги, соответствующие glob в стиле gitignore, или исключите их с помощью ^
ug -g 'FILEGLOB' PATTERN ... ug -g '^FILEGLOB' PATTERN ...
ug -g 'DIRGLOB/' PATTERN ... ug -g '^DIRGLOB/' PATTERN ...
ug -g 'PATH/FILEGLOB' PATTERN ... ug -g '^PATH/FILEGLOB' PATTERN ...
ug -g 'PATH/DIRGLOB/' PATTERN ... ug -g '^PATH/DIRGLOB/' PATTERN ...
Включите файлы для поиска по расширениям имен файлов (суффиксу) или исключите их с помощью ^
, сокращения для -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
Включить скрытые файлы (точечные файлы) и каталоги для поиска (по умолчанию опущено).
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
укажите hidden
в вашем .ugrep, чтобы всегда искать скрытые файлы с помощью ug
.
Исключить файлы, указанные в .gitignore и т. д.
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
укажите ignore-files
в вашем .ugrep, чтобы всегда игнорировать их с помощью ug
. Добавьте дополнительные ignore-files=...
по желанию.
Шаблоны поиска, исключая отрицательные шаблоны («соответствует этому, но не этому»)
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
Используйте предопределенные шаблоны регулярных выражений для поиска исходного кода, JavaScript, XML, JSON, HTML, PHP, уценки и т. д.
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
Сортировка совпадающих файлов по имени, наилучшему совпадению, размеру и времени.
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
Вывод результатов в CSV, JSON, XML и пользовательских форматах.
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
отображает справку по полям формата %
для индивидуального вывода.
Выполняйте поиск с помощью Perl-совместимых шаблонов регулярных выражений PCRE и отображайте или заменяйте совпадения подшаблонов.
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
Замените шаблоны в выводе на -P и --replace заменяющий текст, возможно содержащий поля форматирования %
, используя -y
для передачи остальной части файла:
ug --replace='TEXT' PATTERN ... ug -y --replace='TEXT' PATTERN ...
ug --replace='(%m:%o)' PATTERN ... ug -y --replace='(%m:%o)' PATTERN ...
ug -P --replace='%1' PATTERN ... ug -y -P --replace='%1' PATTERN ...
ug --help format
отображает справку по полям формата %
, которые можно дополнительно использовать с --replace
.
Поиск файлов с определенным форматом кодировки, например ISO-8859-1–16, CP 437, CP 850, MACROMAN, KOI8 и т. д.
ug --encoding=LATIN1 PATTERN ...
Установите последнюю версию Ugrep с помощью Homebrew:
$ brew install ugrep
или установите с помощью MacPorts:
$ sudo port install ugrep
При этом устанавливаются команды ugrep
и ug
, где ug
— то же самое, что и ugrep
но также загружается файл конфигурации .ugrep, если он присутствует в рабочем или домашнем каталоге.
Установить с помощью Winget winget install Genivia.ugrep
Или установите с помощью Chocolatey choco install ugrep
Или установите с помощью Scoop scoop install ugrep
Или загрузите полнофункциональный исполняемый файл ugrep.exe
в качестве артефакта выпуска с https://github.com/Genivia/ugrep/releases. Заархивированный выпуск содержит основной двоичный файл ugrep.exe
, а также ug.exe
. Команда ug
, предназначенная для интерактивного использования, загружает и считывает настройки из файла конфигурации .ugrep
(если он присутствует в рабочем или домашнем каталоге).
Добавьте ugrep.exe
и ug.exe
в путь выполнения: перейдите в «Настройки» и найдите «Путь» в разделе «Найти настройку» . Выберите переменные среды -> Путь -> Создать и добавьте каталог, в который вы поместили исполняемые файлы ugrep.exe
и ug.exe
.
Кончик
Практические советы по использованию ugrep.exe
и ug.exe
в командной строке Windows:
'
кавычки, а вместо них используйте "
; большинство командных утилит Windows считают '
кавычки частью аргумента командной строки!-g/GLOB
вместо обычных аргументов командной строки GLOB
для выбора файлов и каталогов для поиска, особенно для рекурсивного поиска;""
для соответствия всем входным данным это может игнорироваться некоторыми интерпретаторами команд Windows, такими как Powershell; в этом случае вместо этого необходимо указать параметр --match
;R
вместо n
для соответствия любым символам новой строки в Юникоде, например парам rn
и одиночным r
и n
. $ apk add ugrep ugrep-doc
Проверьте https://pkgs.alpinelinux.org/packages?name=ugrep для получения информации о версии.
$ pacman -S ugrep
Проверьте https://archlinux.org/packages/extra/x86_64/ugrep для получения информации о версии.
Сначала включите репозиторий EPEL, затем можно будет установить Ugrep.
$ dnf install ugrep
Проверьте https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ для получения информации о версии.
$ apt-get install ugrep
Проверьте https://packages.debian.org/ugrep для получения информации о версии. Чтобы собрать и попробовать ugrep
локально, см. этапы сборки «Все платформы» ниже.
$ dnf install ugrep
Проверьте https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ для получения информации о версии.
$ pkg install ugrep
Проверьте https://www.freshports.org/textproc/ugrep для получения информации о версии.
$ pkgman install cmd:ugrep
Проверьте https://github.com/haikuports/haikuports/tree/master/app-text/ugrep для получения информации о версии. Чтобы собрать и попробовать ugrep
локально, см. этапы сборки «Все платформы» ниже.
Вы можете использовать стандартный установщик пакетов NetBSD (pkgsrc): http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html.
$ pkg_add ugrep
Проверьте https://openports.pl/path/sysutils/ugrep для получения информации о версии.
$ zypper install ugrep
Проверьте https://build.opensuse.org/package/show/utilities/ugrep для получения информации о версии.
Сначала включите репозиторий EPEL, затем можно будет установить Ugrep.
$ dnf install ugrep
Проверьте https://packages.fedoraproject.org/pkgs/ugrep/ugrep/ для получения информации о версии.
Клонировать ugrep
с помощью
$ git clone https://github.com/Genivia/ugrep
Или посетите https://github.com/Genivia/ugrep/releases, чтобы загрузить конкретный выпуск.
Вы всегда можете добавить их позже, когда вам понадобятся эти функции:
Для опции -P
(регулярные выражения Perl) требуется либо библиотека PCRE2 (рекомендуется), либо библиотека Boost.Regex (необязательный резерв). Если PCRE2 не установлен, установите PCRE2, например, с sudo apt-get install -y libpcre2-dev
или загрузите PCRE2 и следуйте инструкциям по установке. Альтернативно загрузите Boost.Regex и запустите ./bootstrap.sh
и sudo ./b2 --with-regex install
. См. раздел Boost: начало работы.
Опция -z
(поиск сжатых файлов и архивов) требует наличия установленной библиотеки zlib. Он установлен в большинстве систем. Если нет, установите его, например, с помощью sudo apt-get install -y libz-dev
. Для поиска файлов .bz
и .bz2
установите библиотеку bzip2 (рекомендуется), например, с помощью sudo apt-get install -y libbz2-dev
. Для поиска файлов .lzma
и .xz
установите библиотеку lzma (рекомендуется), например, с помощью sudo apt-get install -y liblzma-dev
. Для поиска файлов .lz4
установите библиотеку lz4 (необязательно, не обязательно), например, с помощью sudo apt-get install -y liblz4-dev
. Для поиска файлов .zst
установите библиотеку zstd (необязательно, не обязательно), например, с помощью sudo apt-get install -y libzstd-dev
. Для поиска файлов .br
установите библиотеку brotli (необязательно, не обязательно), например, с помощью sudo apt-get install -y libbrotli-dev
. Для поиска файлов .bz3
установите библиотеку bzip3 (необязательно, не обязательно), например, с помощью sudo apt-get install -y bzip3
.
Кончик
Даже если в вашей системе есть утилиты командной строки, такие как bzip2
, это не обязательно означает, что установлены библиотеки разработки, такие как libbz2
. Должны быть установлены библиотеки разработки .
Некоторые системы Linux могут быть не настроены на загрузку динамических библиотек из /usr/local/lib
, что приводит к ошибке загрузки библиотеки при запуске ugrep
. Чтобы исправить это, добавьте export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
в ваш файл ~/.bashrc
. Или запустите sudo ldconfig /usr/local/lib
.
Выполните сценарий ./build.sh
для сборки ugrep
:
$ cd ugrep
$ ./build.sh
При этом исполняемый файл ugrep
создается в каталоге ugrep/src
с помощью ./configure
и make -j
, что проверяется с помощью make test
. Когда все тесты пройдены, исполняемый файл ugrep
копируется в ugrep/bin/ugrep
, а для команды ug
добавляется символическая ссылка ugrep/bin/ug -> ugrep/bin/ugrep
.
Обратите внимание, что ug
— это то же самое, что и ugrep
, но он также загружает файл конфигурации .ugrep, если он присутствует в рабочем или домашнем каталоге. Это означает, что вы можете определить параметры по умолчанию для ug
в .ugrep.
Альтернативные пути к установленным или локальным библиотекам могут быть указаны с помощью ./build.sh
. Чтобы получить справку по доступным вариантам сборки:
$ ./build.sh --help
Вы можете создавать статические исполняемые файлы, указав:
$ ./build.sh --enable-static
Это может привести к сбою, если библиотеки не компонуются статически, например brotli. В этом случае попробуйте ./build.sh --enable-static --without-brotli
.
Вы можете создать ugrep
с включенными настраиваемыми настройками по умолчанию, например пейджер:
$ ./build.sh --enable-pager
Варианты выбора значений по умолчанию для сборок включают:
--help
отобразить параметры сборки--enable-static
создать статические исполняемые файлы, если это возможно--enable-hidden
всегда искать скрытые файлы и каталоги--enable-pager
всегда использовать пейджер для отображения вывода на терминалах--enable-pretty
раскрасить вывод на терминалы и добавить заголовки имен файлов--disable-auto-color
отключить автоматические цвета, для отображения цветов требуется опция ugrep --color=auto
--disable-mmap
отключить файлы, отображенные в памяти--disable-sse2
отключить оптимизацию SSE2 и AVX--disable-avx2
отключить оптимизацию AVX2 и AVX512BW, но компилировать с SSE2, если он поддерживается--disable-neon
отключить оптимизацию ARM NEON/AArch64--with-grep-path
путь -f
по умолчанию, если GREP_PATH
не определен--with-grep-colors
цвета по умолчанию, если GREP_COLORS
не определен После завершения сборки скопируйте ugrep/bin/ugrep
и ugrep/bin/ug
в удобное место, например, в каталог ~/bin
. Или, если вы захотите установить команды ugrep
и ug
и справочные страницы:
$ sudo make install
При этом также будут установлены файлы шаблонов с предопределенными шаблонами для опции -f
в /usr/local/share/ugrep/patterns/
. Параметр -f
сначала проверяет рабочий каталог на наличие файлов шаблонов, если не найден, проверяет переменную среды GREP_PATH
для загрузки файлов шаблонов, а если не найден, считывает установленные предопределенные файлы шаблонов.
К сожалению, клоны git не сохраняют временные метки, а это означает, что вы можете столкнуться с сообщением «ВНИМАНИЕ: в вашей системе отсутствует 'aclocal-1.15'». или этот автозаголовок не был найден при запуске make
.
Чтобы обойти эту проблему, запустите:
$ autoreconf -fi
$ ./build.sh
GCC 8 и более поздние версии могут выдавать предупреждения типа «примечание: передача параметра для аргумента... изменена в GCC 7.1» . Эти предупреждения следует игнорировать.
Включен файл Dockerfile для сборки ugrep
в контейнере Ubuntu.
Разработчики могут захотеть использовать дезинфицирующие средства для проверки кода Ugrep при внесении существенных изменений, например, для обнаружения гонок данных с помощью ThreadSanitizer:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
Мы проверили ugrep
с помощью clang AddressSanitizer, MemorySanitizer, ThreadSanitizer и UndefineBehaviorSanitizer. Эти параметры влекут за собой значительные накладные расходы во время выполнения, и их не следует использовать для окончательной сборки.
? Вернуться к оглавлению
Обратите внимание, что команды ugrep и ug по умолчанию ищут двоичные файлы и не игнорируют указанные файлы .gitignore, что не сделает сравнение производительности рекурсивного поиска значимым, если не используются параметры -I
и --ignore-files
. Чтобы сделать эти параметры значениями по умолчанию для ug , просто добавьте ignore-binary
и ignore-files
в ваш файл конфигурации .ugrep.
Актуальное сравнение производительности последней версии Ugrep можно найти в тестах производительности Ugrep. Ugrep работает быстрее, чем GNU grep, Silver Searcher, ack, sift. Скорость Ugrep превосходит ripgrep в большинстве тестов.
Во-первых, давайте определим команду :grep
в Vim для рекурсивного поиска файлов. Для этого добавьте следующие строки в ваш .vimrc
расположенный в корневом каталоге:
if executable('ugrep')
set grepprg=ugrep -RInk -j -u --tabs=1 --ignore-files
set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\|%l\|%c\|%m
endif
Это определяет -j
поиск без учета регистра с помощью команды Vim :grep
. Для поиска с учетом регистра удалите -j
из grepprg
. Несколько совпадений в одной строке отображаются в окне быстрого исправления отдельно. Если это нежелательно, удалите -u
из grepprg
. При этом изменении отображается только первое совпадение в строке. Опция --ignore-files
пропускает файлы, указанные в файлах .gitignore
, если они присутствуют. Чтобы ограничить глубину рекурсивного поиска только текущим каталогом, добавьте -1
к grepprg
.
Теперь вы можете вызвать команду Vim :grep
в Vim для поиска файлов по указанному PATH
на наличие совпадений PATTERN
:
:grep PATTERN [PATH]
Если вы опустите PATH
, поиск будет осуществляться в рабочем каталоге. Используйте %
в качестве PATH
для поиска только текущего открытого файла в Vim:
:grep PATTERN %
Команда :grep
отображает результаты в окне быстрого исправления, которое позволяет быстро перейти к найденным совпадениям.
Чтобы открыть окно быстрого исправления с последним списком совпадений:
:copen
Дважды щелкните строку в этом окне (или выберите строку и нажмите ENTER), чтобы перейти к файлу и местоположению в файле соответствия. Введите команды :cn
и :cp
для перехода к следующему или предыдущему совпадению соответственно. Чтобы обновить результаты поиска в окне быстрого исправления, просто выполните команду grep. Например, чтобы рекурсивно выполнить поиск исходного кода C++ с пометкой FIXME
в рабочем каталоге:
:grep -tc++ FIXME
Чтобы закрыть окно быстрого исправления:
:cclose
Вы можете использовать параметры ugrep с командой :grep
, например, для выбора однострочных и многострочных комментариев в текущем файле:
:grep -f c++/comments %
В целях экономии места в быстром исправлении отображается только первая строка многострочного комментария. Чтобы отобразить все строки многострочного совпадения, удалите %-G
из grepformat
.
Популярным инструментом Vim является ctrlp.vim, который устанавливается с помощью:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP использует Ugrep , добавляя следующие строки в ваш .vimrc
:
if executable('ugrep')
set runtimepath^=~/.vim/bundle/ctrlp.vim
let g:ctrlp_match_window='bottom,order:ttb'
let g:ctrlp_user_command='ugrep "" %s -Rl -I --ignore-files -3'
endif
где -I
пропускает двоичные файлы, опция --ignore-files
пропускает файлы, указанные в файлах .gitignore
, если они присутствуют, а опция -3
ограничивает поиск в каталогах тремя уровнями (рабочий каталог и до двух уровней ниже).
Запустите Vim и введите команду:
:helptags ~/.vim/bundle/ctrlp.vim/doc
Чтобы просмотреть документацию CtrlP в Vim, введите команду:
:help ctrlp.txt
? Вернуться к оглавлению
Благодаря Мануэлю Уберти теперь вы можете использовать ugrep в Emacs. Чтобы использовать ugrep вместо GNU grep в Emacs, добавьте следующую строку в ваш файл .emacs.d/init.el
:
(setq-default xref-search-program ‘ugrep)
Это означает, что команды Emacs, такие как project-find-regexp
, которые полагаются на Xref, теперь могут использовать возможности ugrep .
Более того, grep
можно использовать в командах grep Emacs. Например, вы можете запустить lgrep
с помощью ugrep
, настроив grep-template
примерно так:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
Если у вас нет Emacs версии 29 (или выше), вы можете загрузить и собрать Emacs из главной ветки Emacs или вручную включить интеграцию Xref с ugrep :
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
? Вернуться к оглавлению
Готовая версия ugrep поддерживает все стандартные параметры командной строки GNU/BSD grep, а также улучшает многие из них. Подробности см. в заметных улучшениях по сравнению с grep.
Если вы хотите точно придерживаться шаблонов Unicode GNU/BSD grep ASCII/LATIN1, не относящихся к UTF, используйте опцию -U
, чтобы отключить полное сопоставление шаблонов Unicode.
Фактически выполнение ugrep
с опциями -U
, -Y
, -.
и --sort
заставляет его вести себя точно так же, как egrep
, сопоставляя только шаблоны Unicode ASCII/LATIN1, отличные от UTF, позволяя пустым шаблонам сопоставлять и искать скрытые файлы вместо их игнорирования соответственно. См. эквивалентность grep.
Вы можете создавать удобные псевдонимы grep с опциями -U
, -Y
, -.
и --sort
или включите другие параметры по желанию.
Или вы можете создать исполняемые файлы grep
, egrep
и fgrep
скопировав ugrep
под эти имена. Когда исполняемый файл ugrep
(или ugrep.exe
) копируется как grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
), тогда используются опции -U
, -Y
и -.
автоматически включаются вместе с -G
для grep
, -E
для egrep
и -F
для fgrep
. Кроме того, при копировании как zgrep
, zegrep
и zfgrep
включается опция -z
. Например, когда ugrep
копируется как zegrep
, параметры -z
, -E
, -Y
, -.
и --sort
включены.
Аналогично, символические и жесткие ссылки на ugrep
также отлично подходят для создания замен grep
, egrep
и fgrep
. Например, чтобы создать символическую ссылку egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
/opt/local/bin
является лишь примером и может находиться или не находиться в вашем $path
и может быть найден или не найден при выполнении egrep
в зависимости от вашего $path
.
Ugrep эквивалентен GNU/BSD grep, если используются следующие параметры:
grep = ugrep -G -U -Y -. --sort -Dread -dread
egrep = ugrep -E -U -Y -. --sort -Dread -dread
fgrep = ugrep -F -U -Y -. --sort -Dread -dread
zgrep = ugrep -z -G -U -Y -. --sort -Dread -dread
zegrep = ugrep -z -E -U -Y -. --sort -Dread -dread
zfgrep = ugrep -z -F -U -Y -. --sort -Dread -dread
где:
-U
отключает сопоставление шаблонов широких символов Юникода, поэтому, например, шаблон xa3
соответствует байту A3 вместо кодовой точки Юникода U+00A3, представленной последовательностью UTF-8 C2 A3. По умолчанию в ugrep xa3
соответствует U+00A3. Мы не рекомендуем использовать -U
для поиска по текстовым шаблонам, только для двоичного поиска или для поиска файлов Latin-1 (iso-8859-1), не сообщая об этих файлах как о двоичных (начиная с ugrep v3.5.0).-Y
включает пустые совпадения, поэтому, например, шаблон a*
соответствует каждой строке, а не последовательности a
. По умолчанию в Ugrep шаблон a*
соответствует последовательности символов a
. Более того, в ugrep шаблон a*b*c*
соответствует тому, что должно соответствовать по умолчанию. Посмотрите улучшения.-.
ищет скрытые файлы (точечные файлы). По умолчанию скрытые файлы игнорируются, как и большинство утилит Unix.--sort
определяет выходные данные, отсортированные по пути, показывая сначала отсортированные совпадающие файлы, а затем отсортированные рекурсивные совпадения в подкаталогах. В противном случае соответствующие файлы сообщаются в произвольном порядке для повышения производительности;-Dread
и -dread
— это настройки grep по умолчанию в GNU/BSD, но использовать их не рекомендуется; пояснения см. в разделе «Улучшения».? Вернуться к оглавлению
Часто используемые псевдонимы, добавляемые в .bashrc
для повышения производительности:
alias uq = 'ug -Q' # interactive TUI search (uses .ugrep config)
alias uz = 'ug -z' # compressed files and archives search (uses .ugrep config)
alias ux = 'ug -U --hexdump' # binary pattern search (uses .ugrep config)
alias ugit = 'ug -R --ignore-files' # works like git-grep & define your preferences in .ugrep config
alias grep = 'ug -G' # search with basic regular expressions (BRE) like grep
alias egrep = 'ug -E' # search with extended regular expressions (ERE) like egrep
alias fgrep = 'ug -F' # find string(s) like fgrep
alias zgrep = 'ug -zG' # search compressed files and archives with BRE
alias zegrep = 'ug -zE' # search compressed files and archives with ERE
alias zfgrep = 'ug -zF' # find string(s) in compressed files and/or archives
alias xdump = 'ugrep -X ""' # hexdump files without searching (don't use .ugrep config)
alias zmore = 'ugrep+ -z -I -+ --pager ""' # view compressed, archived and regular files (don't use .ugrep config)
? Вернуться к оглавлению
-Q
.n
.-U
).--bool
).--ignore-files
.-Z
.-z
.-z
.-z
и --zmax=NUM
на глубину до NUM
уровней.--filter
используя сторонние утилиты преобразования форматов в качестве плагинов.-r
для рекурсивного поиска в каталогах.-.
).-E
используется как egrep, тогда как -G
включает BRE).-J1
).-W
(вывод двоичных совпадений в шестнадцатеричном формате, а текст соответствует выводу, как обычно) и -X
(вывод всех совпадений в шестнадцатеричном формате).--format
).-f
использует переменную среды GREP_PATH
или предопределенные шаблоны, установленные в /usr/local/share/ugrep/patterns
. Если указан -f
, а также указан один или несколько шаблонов -e
, то параметры -F
, -x
и -w
не применяются к шаблонам -f
. Это сделано для того, чтобы избежать путаницы, когда -f
используется с предопределенными шаблонами, которые могут больше не работать должным образом с этими параметрами.-O
, -M
и -t
определяют расширения файлов, шаблоны магических байтов подписи файлов и предопределенные типы файлов соответственно. Это позволяет искать определенные типы файлов в деревьях каталогов, например, с помощью опций рекурсивного поиска -R
и -r
. Опции -O
, -M
и -t
также применяются к заархивированным файлам в файлах cpio, jar, pax, tar, zip и 7z.-k
, --column-number
для отображения номера столбца с учетом интервала табуляции путем расширения табуляции, как указано опцией --tabs
.-P
(регулярные выражения Perl) поддерживает обратные ссылки (с --format
) и просмотр назад, который использует библиотеку PCRE2 или Boost.Regex для быстрого сопоставления регулярных выражений Perl с синтаксисом, подобным PCRE.-b
с опцией -o
или с опцией -u
, ugrep отображает точное смещение в байтах соответствия шаблону вместо смещения в байтах начала совпадающей строки, сообщаемой GNU/BSD grep.-u
, --ungroup
, чтобы не группировать несколько совпадений в строке. Эта опция снова отображает совпадающую входную строку для каждого дополнительного совпадения с шаблоном в строке. Эта опция особенно полезна вместе с опцией -c
, чтобы сообщать общее количество совпадений с шаблоном на файл, а не количество строк, совпавших на файл.-Y
включает сопоставление пустых шаблонов. Использование шаблонов с пустыми совпадениями является странным и дает разные результаты при использовании GNU grep и BSD grep. Пустые совпадения по умолчанию не выводятся утилитой ugrep , что позволяет избежать ошибок, которые могут привести к «случайным» результатам. Например, в GNU/BSD grep шаблон a*
соответствует каждой строке входных данных и фактически соответствует xyz
три раза (пустые переходы до и между x
, y
и z
). Для разрешения пустых совпадений требуется опция ugrep -Y
. Шаблоны, начинающиеся с ^
или заканчивающиеся на $
, например ^h*$
, соответствуют пустым. Эти шаблоны автоматически включают опцию -Y
.-D, --devices=ACTION
по умолчанию skip
вместо read
. Это предотвращает неожиданное зависание именованных каналов в каталогах, в которых выполняется рекурсивный поиск, как это может произойти с GNU/BSD grep, который по умолчанию read
устройства.-d, --directories=ACTION
по умолчанию skip
вместо read
. По умолчанию поиск осуществляется в каталогах, указанных в командной строке, но не рекурсивно вглубь подкаталогов.-N PATTERN
, которые представляют собой шаблоны формы (?^X)
, которые пропускают весь ввод X
, тем самым удаляя X
из поиска. Например, отрицательные шаблоны можно использовать для пропуска строк и комментариев при поиске идентификаторов в исходном коде и поиска совпадений, которых нет в строках и комментариях. Предопределенные шаблоны zap
используют отрицательные шаблоны, например, используйте -f cpp/zap_comments
, чтобы игнорировать совпадения шаблонов в комментариях C++.GREP_OPTIONS
, поскольку поведение ugrep должно быть переносимым и предсказуемым в любой системе. По этой же причине GNU grep отказался от GREP_OPTIONS
. Используйте команду ug
, которая загружает файл конфигурации .ugrep, расположенный в рабочем каталоге или в домашнем каталоге, если он присутствует, или используйте псевдонимы оболочки для создания новых команд с конкретными параметрами поиска.? Вернуться к оглавлению
Чтобы выполнить поиск с использованием файла конфигурации .ugrep
расположенного в рабочем или домашнем каталоге (обратите внимание, что ug
— это то же самое, что и ugrep --config
):
ug PATTERN FILE...
Чтобы сохранить файл конфигурации .ugrep
в рабочем каталоге, затем отредактируйте этот файл в своем домашнем каталоге, чтобы настроить параметры ug
по умолчанию:
ug --save-config
Чтобы выполнить поиск в рабочем каталоге и рекурсивно глубже для main
(обратите внимание, что -r
рекурсивные символические ссылки включены по умолчанию, если аргументы файла не указаны):
ug main
То же самое, но рекурсивно искать только файлы исходного кода C++, игнорируя все остальные файлы:
ug -tc++ main
То же самое, используя TUI интерактивного запроса, начиная с исходного шаблона поиска main
(обратите внимание, что -Q
с исходным шаблоном требует опции -e
поскольку шаблоны обычно задаются в интерактивном режиме, и все аргументы командной строки считаются файлами/каталогами):
ug -Q -tc++ -e main
Чтобы выполнить поиск #define
(и # define
и т. д.) с использованием шаблона регулярного выражения в файлах C++ (обратите внимание, что шаблоны должны быть заключены в кавычки, чтобы предотвратить подстановку команд *
и ?
):
ug -tc++ '#[t ]*define'
Чтобы выполнить рекурсивный поиск main
слова ( -w
) без перехода по символическим ссылкам ( -r
) в каталоге myproject
, показывая номера совпадающих строк ( -n
) и столбцов ( -k
) рядом с совпавшими строками:
ug -r -nkw main myproject
То же самое, но ищите только myproject
без более глубокой рекурсии (обратите внимание, что аргументы каталога по умолчанию ищутся на одном уровне):
ug -nkw main myproject
То же самое, но выполните поиск myproject
и на один уровень подкаталога глубже (два уровня) с -2
:
ug -2 -nkw main myproject
То же самое, но поиск файлов C++ только в myproject
и его подкаталогах с помощью -tc++
:
ug -tc++ -2 -nkw main myproject
То же самое, но также поиск внутри архивов (например, файлов zip и tar) и сжатых файлов с помощью -z
:
ug -z -tc++ -2 -nkw main myproject
Рекурсивно выполните поиск main
рабочего каталога, игнорируя файлы gitignored (например, предполагая, что .gitignore
находится в рабочем каталоге или ниже):
ug --ignore-files -tc++ -nkw main
Чтобы вывести список всех файлов в рабочем каталоге и глубже, которые не игнорируются файлами .gitignore
:
ug --ignore-files -l ''
Чтобы отобразить список расширений имен файлов и «магических байтов» (шебангов), которые ищутся в соответствии с аргументами -t
:
ug -tlist
Чтобы рекурсивно перечислить все файлы оболочки на основе расширений и шебангов с -l
(обратите внимание, что ''
соответствует любому непустому файлу):
ug -l -tShell ''
? Вернуться к оглавлению
Для поиска main
в исходном коде, игнорируя строки и блоки комментариев, вы можете использовать отрицательные шаблоны с опцией -N
, чтобы пропускать нежелательные совпадения в строках в кавычках C/C++ и блоках комментариев:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
Это большой труд, чтобы написать правильно! Если вы похожи на меня, я не хочу тратить время на возню с шаблонами регулярных выражений, когда работаю над чем-то более важным. Существует более простой способ, используя предопределенные шаблоны UGREP ( -f
), которые установлены с помощью инструмента ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Этот запрос также ищет другие файлы, кроме исходного кода C/C ++, таких как Readmes, Makefiles и так далее. Мы также пропускаем символики с -r
. Итак, давайте уточним этот запрос, выбрав файлы C/C ++ только с помощью Option -tc,c++
и включите символики к файлам и каталогам с -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
Что если вы хотите только искать main
, но не как main(
? В данном случае используйте негативную шаблон для этого, чтобы пропустить нежелательный mainh*(
шаблон соответствует:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
Это использует параметры -e
и -N
для явного определения шаблона и негативного шаблона, соответственно, который по существу формирует шаблон main|(?^mainh*()
, где h
соответствует пространству и вкладке. В общем Негативные шаблоны полезны для фильтрации матчей шаблонов, которые нас не интересуют.
В качестве другого примера, допустим, мы можем искать слово FIXME
в блоках комментариев C/C ++. Для этого мы можем сначала выбрать блоки комментариев с предварительно определенным шаблоном c/comments
от UGREP , а затем выбрать строки с помощью FIXME
используя трубу:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
Результаты фильтрации с помощью труб, как правило, проще, чем использование или логика или логики или логики или или логики, которые используют некоторые инструменты поиска. Этот подход следует за духом Unix, чтобы устоять утилиты и использовать их в комбинации для более сложных задач.
Давайте создадим отсортированный список всех идентификаторов, найденных в исходном коде Java, пропуская струны и комментарии:
ug -R -tjava -f java/names myproject | sort -u
Это соответствует идентификаторам java unicode с использованием regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
определенного в patterns/java/names
.
Благодаря традиционным GREP и GREP инструментам, для повторного поиска исходного файла C/C ++ требуется большие усилия, который определяет функцию qsort
, требуя чего-то подобного:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
К счастью, с UGREP мы можем просто выбрать все определения функций в файлах с расширением .c
или .cpp
, используя опцию -Oc,cpp
и с помощью предопределенных functions
шаблона, которые установлены с инструментом для создания всех определений функций. Затем мы выбираем тот, который мы хотим:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
Обратите внимание, что мы могли бы использовать -tc,c++
для выбора файлов C/C ++, но это также включает в себя файлы заголовков, когда мы хотим найти файлы .c
и .cpp
.
Мы также можем пропустить файлы и каталоги, которые будут искать, которые определены в .gitignore
. Для этого мы используем --ignore-files
чтобы исключить любые файлы и каталоги из рекурсивных поисков, которые соответствуют глобусам в .gitignore
, когда найден один или несколько файлов .gitignore
:
ug -R -tc++ --ignore-files -f c++/defines
Это ищет файлы c ++ ( -tc++
) в рабочем каталоге для строк #define
( -f c++/defines
), в то время как пропуски файлов и каталогов объявлены в .gitignore
. Если вы найдете это слишком долго для печати, определите псевдоним для поиска каталогов GitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
Чтобы выделить совпадения, когда мы проталкиваемся через цепь труб, мы должны использовать --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
Это возвращает заповедный список всех #define FOO...
макросов в файлах исходного кода C/C ++, пропуская файлы, определенные в .gitignore
.
Обратите внимание, что дополнение --exclude
не является --include
, потому что исключения всегда имеют приоритет над включениями, поэтому мы не можем надежно перечислить файлы, которые игнорируются --include-from='.gitignore'
. Поселяются только файлы, четко указанные с --include
и каталоги, указанные в явно указанных с помощью --include-dir
. --include-from
списков глобусов, которые считаются как файлами, так и каталогами, чтобы добавить к --include
и --include-dir
, соответственно. Это означает, что когда имена каталогов и пути каталогов не указаны явно в этом файле, то это не будет посещать с использованием --include-from
.
Поскольку UGREP проверяет, если вход является допустимым UTF-кодируемым Unicode (если не используется -U
), можно использовать его в качестве фильтра для игнорирования вывода без UTF, создаваемого программой:
program | ugrep -I ''
Если программа создает допустимый выход, то выход проходит через выход, в противном случае вывод отфильтровал опцию -I
. Если выход изначально действителен для очень большой части, но сопровождается недействительным выходом, то UGREP может изначально показать выход, но исключая недопустимый выход, после чего блокируется дальнейший выход.
Чтобы отфильтровать линии, которые являются действительными ASCII или UTF, кодируемыми, в то время как линии не удаляют линии:
program | ugrep '[p{Unicode}--[n]]+'
Обратите внимание, что p{Unicode}
соответствует n
но мы не хотим соответствовать всем файлу! Просто строки с [p{Unicode}--[n]]+
.
? Вернуться к содержимому
Страница UGREP MAN:
man ugrep
Чтобы показать страницу справки:
ug --help
Чтобы показать варианты, которые упоминают WHAT
:
ug --help WHAT
Чтобы показать список значений опции -t TYPES
:
ug -tlist
В интерактивном запросе TUI нажмите F1 или CTRL-Z для помощи и вариантов:
ug -Q
? Вернуться к содержимому
--config[=FILE], ---[FILE]
Use configuration FILE. The default FILE is `.ugrep'. The working
directory is checked first for FILE, then the home directory. The
options specified in the configuration FILE are parsed first,
followed by the remaining options specified on the command line.
The ug command automatically loads a `.ugrep' configuration file,
unless --config=FILE or --no-config is specified.
--no-config
Do not load the default .ugrep configuration file.
--save-config[=FILE] [OPTIONS]
Save configuration FILE to include OPTIONS. Update FILE when
first loaded with --config=FILE. The default FILE is `.ugrep',
which is automatically loaded by the ug command. When FILE is a
`-', writes the configuration to standard output. Only part of the
OPTIONS are saved that do not cause searches to fail when combined
with other options. Additional options may be specified by editing
the saved configuration file. A configuration file may be modified
manually to specify one or more config[=FILE] to indirectly load
the specified FILEs, but recursive config loading is not allowed.
Команда ug
предназначена для контекста-зависимого интерактивного поиска и эквивалентна команде ugrep --config
для загрузки файла конфигурации .ugrep
, когда присутствует в рабочем каталоге или, когда он не найден, в домашнем каталоге:
ug PATTERN ...
ugrep --config PATTERN ...
Команда ug
также сортирует файлы по имени для поиска в каталоге. Файл конфигурации содержит NAME=VALUE
на строку, где NAME
является именем длинной опции (без --
), а =VALUE
это аргумент, который является необязательным и может быть пропущено в зависимости от опции. Пустые линии и линии, начиная с #
игнорируются:
# Color scheme
colors=cx=hb:ms=hiy:mc=hic:fn=hi+y+K:ln=hg:cn=hg:bn=hg:se=
# Disable searching hidden files and directories
no-hidden
# ignore files specified in .ignore and .gitignore in recursive searches
ignore-files=.ignore
ignore-files=.gitignore
Параметры командной строки анализируются в следующем порядке: сначала (по умолчанию или по имени) загружается файл конфигурации), а затем анализируются оставшиеся параметры и аргументы в командной строке.
Опция --stats
Отображает файл конфигурации, используемый после поиска.
Именованные файлы конфигурации предназначены для оптимизации пользовательских задач поиска путем уменьшения количества параметров командной строки до одного ---FILE
для использования коллекции параметров, указанных в FILE
. Опция --config=FILE
и его сокращенная форма ---FILE
указанный файл конфигурации, расположенный в рабочем каталоге, или, когда он не найден, расположен в домашнем каталоге:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
Ошибка создается, когда FILE
не найден или не может быть прочитал.
Именованные файлы конфигурации могут использоваться для определения сбора опций, которые относятся к требованиям задачи в рабочем процессе разработки проекта. Например, сообщать о неразрешенных вопросах, проверяя исходный код и документацию для комментариев с элементами FixMe и TODO. Такой именованный файл конфигурации может быть локализован в проекте, поместив его в каталог проектов, или он может быть сделан глобальным, поместив его в домашний каталог. Для визуальной обратной связи цветовая схема, специфичная для этой задачи, может быть указана с colors
опции в FILE
конфигурации, чтобы помочь идентифицировать выход, созданный именованной конфигурацией, в отличие от конфигурации по умолчанию.
Параметр --save-config
сохраняет файл конфигурации .ugrep
в рабочую каталог, используя текущую конфигурацию, загруженную с помощью --config
. Это сохраняет текущую конфигурацию в сочетании с дополнительными параметрами, когда также указано. Только те варианты, которые не могут конфликтовать с другими опциями и опциями, которые не могут отрицательно влиять на результаты поиска, будут сохранены.
Параметр --save-config=FILE
сохраняет конфигурацию в указанном FILE
. Конфигурация записывается на стандартный выход, когда FILE
- -
.
В качестве альтернативы, файл конфигурации может быть создан вручную или изменен. Файл конфигурации может включать одну или несколько config[=FILE]
для косвенной загрузки специфического FILE
, но рекурсивная загрузка конфигурации запрещена. Самый простой способ Manuall создать файл конфигурации - указать config
в верхней части файла, за которым следует длинные параметры для переопределения дефолтов.
? Вернуться к содержимому
-Q[=DELAY], --query[=DELAY]
Query mode: start a TUI to perform interactive searches. This mode
requires an ANSI capable terminal. An optional DELAY argument may
be specified to reduce or increase the response time to execute
searches after the last key press, in increments of 100ms, where
the default is 3 (300ms delay). No whitespace may be given between
-Q and its argument DELAY. Initial patterns may be specified with
-e PATTERN, i.e. a PATTERN argument requires option -e. Press F1
or CTRL-Z to view the help screen. Press F2 or CTRL-Y to invoke a
command to view or edit the file shown at the top of the screen.
The command can be specified with option --view, or defaults to
environment variable PAGER when defined, or EDITOR. Press Tab and
Shift-Tab to navigate directories and to select a file to search.
Press Enter to select lines to output. Press ALT-l for option -l
to list files, ALT-n for -n, etc. Non-option commands include
ALT-] to increase context. See also options --no-confirm, --delay,
--split and --view.
--no-confirm
Do not confirm actions in -Q query TUI. The default is confirm.
--delay=DELAY
Set the default -Q key response delay. Default is 3 for 300ms.
--split
Split the -Q query TUI screen on startup.
--view[=COMMAND]
Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.
Эта опция запускает пользовательский интерфейс для интерактивного ввода шаблонов поиска:
-c
для подсчета совпадений. Нажатие Alt -C снова отключает -c
. Параметры могут быть переключены с помощью ALT -клавиши во время поиска или при просмотре экрана справки. Если клавиши Alt/Meta не поддерживаются (например, x11 xterm), нажмите Ctrl-O, а затем клавиша, соответствующая опции.-g
файл и сопоставление каталогов Globs, разделенный запятой список шаблонов в стиле Gitignore. Нажатие ESC возвращает контроль в подсказку с шаблоном запроса (глобусы сохраняются). Когда глобую предшествует !
или ^
, пропускает файлы, чье имя соответствует глобусу, когда глобус содержит A /
, полные имена PathNames соответствуют. В противном случае базовые имена соответствуют. Когда глобус заканчивается с A /
, каталоги соответствуют.Q>
(нормальным), F>
(фиксированные строки), G>
(базовое регуляцию), P>
(Perl Matching) и Z>
(нечеткое сопоставление). Когда показана подсказка --glob=
, может быть введен в запятой список шаблонов в стиле Gitignore. Нажатие ESC возвращает контроль в подсказку.--view
.--view=COMMAND
. В противном случае переменные среды PAGER
или EDITOR
используются для вызова команды с помощью Ctrl-Y. Имена файлов должны быть включены и видимы на выводе для использования этой функции.--color
.DELAY
такое как 1. Однако более низкие значения могут увеличить нагрузку на системную нагрузку в результате многократного инициирования и отмены поиска при каждом нажатом клавише.--heading
умолчанию включено. Нажмите Alt-+, чтобы выключить заголовки.Запрос Mapping Key:
Ключ (S) | функция |
---|---|
Alt-key | Перевернуть вариант командной строки UGREP, соответствующая key |
Alt-/ xxxx / | Вставить шестнадцатеричную точку Unicode u+xxxx |
Esc Ctrl-C | вернуться или выйти |
Ctrl-Q | Быстрый выход и выводит результаты, выбранные в режиме выбора |
Tab | CHDIR в каталог файла, показанный в верхней части экрана, или выберите файл |
Shift-Tab | CHDIR один уровень вверх или Deselect File |
Enter | Введите режим выбора и переключите выбранные линии для вывода на выходе |
Up Ctrl-P | двигаться вверх |
Down Ctrl-N | двигаться вниз |
Left Ctrl-B | двигаться влево |
Right Ctrl-F | двигаться вправо |
PgUp Ctrl-G | Переместите отображение на странице |
PgDn Ctrl-D | Переместите отображение на странице |
Alt-Up | Переместите отображение на 1/2 страницы (MacOS Shift-Up ) |
Alt-Down | Переместите отображение на 1/2 страницы (Macos Shift-Down ) |
Alt-Left | Переместите отображение на 1/2 страницы (MacOS Shift-Left ) |
Alt-Right | Переместите отображение справа на 1/2 страницы (MacOS Shift-Right ) |
Home Ctrl-A | Переместить курсор в начало линии |
End Ctrl-E | Переместить курсор в конце линии |
Ctrl-K | Удалить после курсора |
Ctrl-L | Обновить экран |
Ctrl-O + key | Перевернуть вариант командной строки UGREP, соответствующая key , так же, как Alt-key |
Ctrl-R F4 | прыгнуть в закладки |
Ctrl-S | Перейдите к следующему DIR/FILE/CENTEXT |
Ctrl-T F5 | Переключатель сплит-экрана ( --split запускает сплит-экран TUI) |
Ctrl-U | Удалить перед курсором |
Ctrl-V | дословный характер |
Ctrl-W | Прыгните один Dir/File/Context |
Ctrl-X F3 | установить закладку |
Ctrl-Y F2 | Просмотреть или отредактировать файл, показанный в верхней части экрана |
Ctrl-Z F1 | Посмотреть помощь и варианты |
Ctrl-^ | CHDIR обратно в стартовый рабочий каталог |
Ctrl-] | Перевернуть цвет/моно |
Ctrl- | прекратить процесс |
Для интерактивного поиска файлов в рабочем каталоге и ниже:
ug -Q
То же самое, но ограничены только файлами c ++ и игнорируют .gitignore
файлы:
ug -Q -tc++ --ignore-files
Для интерактивного поиска всех Makefiles в рабочем каталоге и ниже:
ug -Q -g 'Makefile*' -g 'makefile*'
То же самое, но для до 2 уровней каталогов (работа и один подкаталог):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
Для интерактивного просмотра содержимого main.cpp
и поиска его, где -y
показывает любые линии, не являющиеся приспособлением, как контекст:
ug -Q -y main.cpp
Для интерактивного поиска main.cpp
, начиная с шаблона поиска TODO
и контекста соответствия 5 строк (контекст может быть включен и отключен в интерактивном порядке, это также переопределяет размер контекста по умолчанию 2 строк):
ug -Q -C5 -e TODO main.cpp
Для просмотра и поиска содержимого архива (например, Zip, Tarball):
ug -Q -z archive.tar.gz
Для интерактивного выбора файлов из project.zip
для декомпрессации с помощью unzip
, используя режим выбора запроса UGREP (нажмите Enter, чтобы выбрать строки):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
? Вернуться к содержимому
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-l, --files-with-matches
Only the names of files containing selected lines are written to
standard output. ugrep will only search a file until a match has
been found, making searches potentially less expensive. Pathnames
are listed once per file searched. If the standard input is
searched, the string ``(standard input)'' is written.
-R, --dereference-recursive
Recursively read all files under each directory. Follow all
symbolic links to files and directories, unlike -r.
-r, --recursive
Recursively read all files under each directory, following symbolic
links only if they are on the command line. Note that when no FILE
arguments are specified and input is read from a terminal,
recursive searches are performed as if -r is specified.
-S, --dereference-files
When -r is specified, symbolic links to files are followed, but not
to directories. The default is not to follow symbolic links.
--depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, -12, ...
Restrict recursive searches from MIN to MAX directory levels deep,
where -1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and -35 search 3 to 5
levels deep. Enables -r if -R or -r is not specified.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Если файловые аргументы не указаны, и ввод считывается из терминала, рекурсивные поиски выполняются так, как если бы -r
указан. Чтобы заставлять чтение с стандартного ввода, укажите -
как аргумент файла.
Чтобы рекурсивно перечислить все непустые файлы в рабочем каталоге:
ug -r -l ''
Чтобы перечислить все непустые файлы в рабочем каталоге, но не глубже (поскольку аргумент файла дается, в данном случае .
Для рабочего каталога):
ug -l '' .
Чтобы перечислить все непустые файлы в каталоге mydir
, но не глубже (поскольку аргумент файла дан):
ug -l '' mydir
Чтобы перечислить все непустые файлы в каталоге mydir
и глубже, следуя Symlinks:
ug -R -l '' mydir
Чтобы рекурсивно перечислить все непустые файлы на указанном пути, посещая только подкатарии, то есть каталоги mydir/
и Sub -Searctories на одном уровне более глубоко mydir/*/
посещаются (обратите внимание, что -2 -l
можно сократить до -l2
):
ug -2 -l '' mydir
Рекурсивно перечислить все непустые файлы в каталоге mydir
, не следуя каким-либо символическим ссылкам (за исключением случаев, когда в командной строке, такой как mydir
):
ug -rl '' mydir
Чтобы рекурсивно перечислить все make -файлы, соответствующие тексту CPP
:
ug -l -tmake 'CPP'
Рекурсивно перечислить все Makefile.*
Соответствие bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
Рекурсивно перечислить все непустые файлы с расширением .sh, с -Osh
:
ug -l -Osh ''
Рекурсивно перечислить все сценарии оболочки на основе расширений и шебангов с -tShell
:
ug -l -tShell ''
Рекурсивно перечислить все сценарии оболочки на основе расширений только с -tshell
:
ug -l -tshell ''
? Вернуться к содержимому
--bool, -%, -%%
Specifies Boolean query patterns. A Boolean query pattern is
composed of `AND', `OR', `NOT' operators and grouping with `(' `)'.
Spacing between subpatterns is the same as `AND', `|' is the same
as `OR' and a `-' is the same as `NOT'. The `OR' operator binds
more tightly than `AND'. For example, --bool 'A|B C|D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches
lines with `A' and not `B'. Operators `AND', `OR', `NOT' require
proper spacing. For example, --bool 'A OR B AND C OR D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A AND NOT B'
matches lines with `A' without `B'. Quoted subpatterns are matched
literally as strings. For example, --bool 'A "AND"|"OR"' matches
lines with `A' and also either `AND' or `OR'. Parentheses are used
for grouping. For example, --bool '(A B)|C' matches lines with `A'
and `B', or lines with `C'. Note that all subpatterns in a Boolean
query pattern are regular expressions, unless -F is specified.
Options -E, -F, -G, -P and -Z can be combined with --bool to match
subpatterns as strings or regular expressions (-E is the default.)
This option does not apply to -f FILE patterns. The double short
option -%% enables options --bool --files. Option --stats displays
the Boolean search patterns applied. See also options --and,
--andnot, --not, --files and --lines.
--files
Boolean file matching mode, the opposite of --lines. When combined
with option --bool, matches a file if all Boolean conditions are
satisfied. For example, --bool --files 'A B|C -D' matches a file
if some lines match `A', and some lines match either `B' or `C',
and no line matches `D'. See also options --and, --andnot, --not,
--bool and --lines. The double short option -%% enables options
--bool --files.
--lines
Boolean line matching mode for option --bool, the default mode.
--and [[-e] PATTERN] ... -e PATTERN
Specify additional patterns to match. Patterns must be specified
with -e. Each -e PATTERN following this option is considered an
alternative pattern to match, i.e. each -e is interpreted as an OR
pattern. For example, -e A -e B --and -e C -e D matches lines with
(`A' or `B') and (`C' or `D'). Note that multiple -e PATTERN are
alternations that bind more tightly together than --and. Option
--stats displays the search patterns applied. See also options
--not, --andnot, and --bool.
--andnot [[-e] PATTERN] ...
Combines --and --not. See also options --and, --not, and --bool.
--not [-e] PATTERN
Specifies that PATTERN should not match. Note that -e A --not -e B
matches lines with `A' or lines without a `B'. To match lines with
`A' that have no `B', specify -e A --andnot -e B. Option --stats
displays the search patterns applied. See also options --and,
--andnot, and --bool.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Обратите внимание, что варианты --and
, --not
и --andnot
не требуют -e PATTERN
.
Опция -%
делает все шаблоны на основе логических данных, поддерживая следующие логические операции, перечисленные с самого высокого уровня приоритета до самого низкого:
оператор | альтернатива | результат |
---|---|---|
"x" | Сопоставьте x буквально и точно так же, как указано (используя стандартную режиму выхода Q и E ) | |
( ) | Логическое выражение группировки | |
-x | NOT x | перевернутый матч, т.е. совпадает, если x не совпадает |
x|y | x OR y | соответствует строкам с x или y |
xy | x AND y | соответствует линиям с x и y |
x
и y
- это подчинения, которые не начинаются со специальных символов |
, -
и (
(используйте цитаты или побег, чтобы соответствовать их);
-
NOT
одинаковы и имеют приоритет над OR
, что означает, что -x|y
== (-x)|y
, например.
|
и OR
являются одинаковыми и имеют приоритет AND
, что означает, что xy|z
== x (y|z)
например;
Параметр --stats
отображает логические запросы в читаемой человеке, преобразованной в CNF (конъюнктивная нормальная форма), после завершения поиска. Чтобы показать CNF без поиска, прочитайте из стандартного ввода, завершенного EOF, например, echo | ugrep -% '...' --stats
.
Подвески зажигаются на выходе, за исключением того, что NOT
отрицаются ( NOT
подчиненный все еще может отображаться в соответствующей линии при использовании картины или не такого как x|-y
). Обратите внимание, что подчинения могут перекрываться. В этом случае только первое подчинение подчинения зажигается.
Несколько строк могут быть сопоставлены, когда подбороды соответствуют новичкам. Однако есть одно исключение X
подчинения, заканчивающиеся (?=X)
Пустые узоры соответствуют любой линии (стандарт GREP). Следовательно, -% 'x|""|y'
совпадает с всем, а x
и y
не зажигаются. Опция -y
должен использоваться для отображения каждой строки в качестве контекста, например, -y 'x|y'
.
Интерактивное интерактивное запросы FZF (логический поиск с фиксированными строками с нечетким сопоставлением, чтобы позволить, например, до 4 дополнительных символов, сопоставленных с -Z+4
в словах с -w
), нажмите вкладку и alt -y, чтобы просмотреть файл с матчами. Нажмите Shift-Tab и Alt-L, чтобы вернуться к списку соответствующих файлов:
ug -Q -%% -l -w -F -Z+4 --sort=best
Чтобы рекурсивно найти все файлы, содержащие как hot
, так и dog
в любом месте файла с опцией --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
Чтобы найти линии, содержащие как hot
, так и dog
в myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
Чтобы найти линии, содержащие place
, а затем также hotdog
или taco
(или оба) в myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
То же самое, но исключайте линии, соответствующие diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
Чтобы найти линии с diner
или линиями, которые соответствуют fast
и food
, но bad
в myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
Чтобы найти линии с fast food
(точно) или линий с diner
, но не bad
или old
в myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
То же самое, но используя другое логическое выражение, которое имеет одинаковое значение:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
Чтобы найти линии с diner
подразумевающей good
в myfile.txt
(то есть, покажите линии с good
без diner
и покажите линии с diner
, но только с good
, что логически подразумевается!):
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
Чтобы найти строки с foo
и -bar
и "baz"
в myfile.txt
(не то, что -
"
следует сопоставить с помощью Escapes и с
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
Для поиска myfile.cpp
для строк с TODO
или FIXME
, но не оба на одной линии, как XOR:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
? Вернуться к содержимому
-e PATTERN, --regexp=PATTERN
Specify a PATTERN to search the input. An input line is selected
if it matches any of the specified patterns. This option is useful
when multiple -e options are used to specify multiple patterns, or
when a pattern begins with a dash (`-'), or to specify a pattern
after option -f or after the FILE arguments.
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-N PATTERN, --neg-regexp=PATTERN
Specify a negative PATTERN to reject specific -e PATTERN matches
with a counter pattern. Note that longer patterns take precedence
over shorter patterns, i.e. a negative pattern must be of the same
length or longer to reject matching patterns. Option -N cannot be
specified with -P. This option may be repeated.
-v, --invert-match
Selected lines are those not matching any of the specified
patterns.
-w, --word-regexp
The PATTERN is searched for as a word, such that the matching text
is preceded by a non-word character and is followed by a non-word
character. Word-like characters are Unicode letters, digits and
connector punctuations such as underscore.
-x, --line-regexp
Select only those matches that exactly match the whole line, as if
the patterns are surrounded by ^ and $.
См. Также Boolean Patterns с -%, -%%, -и, не для более мощных вариантов логического запроса, чем традиционные варианты GNU/BSD GREP.
Чтобы отобразить строки в файле myfile.sh
, но не строки, соответствующие ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
Чтобы найти myfile.cpp
для линий с FIXME
и urgent
, но не Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
То же самое, но используя -%
для логических запросов:
ug -% 'FIXME urgent -Scotty' myfile.cpp
Для поиска десятичных декораций, используя шаблон d+
, которые не начинаются с 0
используя отрицательный шаблон 0d+
и исключая 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
Для поиска слов, начинающихся с disp
, без сопоставления display
в файле myfile.py
, используя «негативную шаблон» -N '/<display>'
, где -N
определяет дополнительный отрицательный шаблон для пропуска матчей:
ug -e '<disp' -N '<display>' myfile.py
Чтобы найти строки с помощью слова display
в файле myfile.py
пропуская это слово в строках и комментариях, где -f
указывает шаблоны в файлах, которые являются предопределенными шаблонами в этом случае:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
Чтобы отобразить строки, которые не являются пустыми линиями:
ug -x -e '.*' -N 'h*' myfile.py
То же самое, но используя -v
и -x
с h*
, т.е. pattern ^h*$
:
ug -v -x 'h*' myfile.py
Чтобы рекурсивно перечислить все файлы Python, которые не содержат слова display
, позволяя слову происходить в строках и комментариях:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
? Вернуться к содержимому
--encoding=ENCODING
The encoding format of the input. The default ENCODING is binary
and UTF-8 which are the same. Note that option -U specifies binary
PATTERN matching (text matching is the default.)
Файлы бинарных, ASCII и UTF-8 не требуют этой опции для их поиска. Также файлы UTF-16 и UTF-32 не требуют этой опции для их поиска, предполагая, что файлы UTF-16 и UTF-32 начинаются с UTF BOM (оценка байта), как обычно. Другие кодировки файлов требуют опции --encoding=ENCODING
:
кодирование | параметр |
---|---|
ASCII | н/д |
UTF-8 | н/д |
UTF-16 с Bom | н/д |
UTF-32 с Bom | н/д |
UTF-16 быть без бом | UTF-16 или UTF-16BE |
UTF-16 LE W/O BOM | UTF-16LE |
UTF-32 без бом | UTF-32 или UTF-32BE |
UTF-32 без бом | UTF-32LE |
Латин-1 | LATIN1 или ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
Mac (cr = newline) | MAC |
Макроман (Cr = Newline) | MACROMAN |
EBCDIC | EBCDIC |
Код DOS Страница 437 | CP437 |
Код DOS Страница 850 | CP850 |
Код DOS Страница 858 | CP858 |
Кодовая страница Windows 1250 | CP1250 |
Кодовая страница Windows 1251 | CP1251 |
Кодовая страница Windows 1252 | CP1252 |
Кодовая страница Windows 1253 | CP1253 |
Кодовая страница Windows 1254 | CP1254 |
Кодовая страница Windows 1255 | CP1255 |
Кодовая страница Windows 1256 | CP1256 |
Кодовая страница Windows 1257 | CP1257 |
Кодовая страница Windows 1258 | CP1258 |
Koi8-r | KOI8-R |
Koi8-u | KOI8-U |
Koi8-ru | KOI8-RU |
Обратите внимание, что шаблоны регуляции всегда указываются в UTF-8 (включает ASCII). Для поиска двоичных файлов с помощью двоичных шаблонов см. Поиск и отображение двоичных файлов с -U, -W и -X.
Рекурсивно перечислить все файлы, которые являются ASCII (то есть 7-бит):
ug -L '[^[:ascii:]]'
Рекурсивно перечислить все файлы, не являющиеся файлами, не являющимися файлами, т.е. UTF-8, UTF-16 и UTF-32 с символами Unicode не ASCII (U+0080 и выше):
ug -l '[^[:ascii:]]'
Чтобы проверить, содержит ли файл Unicode не ASCII (U+0080 и выше):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
Чтобы удалить неверные символы Unicode из файла (обратите внимание, что -o
может не работать, потому что двоичные данные обнаруживаются и отклоняются и добавляются новички, но --format="%o%
не проверяет бинарный и копирует матч", как есть " ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
Чтобы рекурсивно перечислить файлы с недопустимым контентом UTF (то есть недопустимых последовательностей UTF-8 байтов или файлов, которые содержат любые кодовые точки UTF-8/16/32, которые находятся за пределами допустимого диапазона Unicode), сопоставив любую кодовую точку .
и с помощью негативного шаблона -N 'p{Unicode}'
чтобы игнорировать каждый действительный символ Unicode:
ug -l -e '.' -N 'p{Unicode}'
Чтобы показать линии, содержащие смайлики смеха:
ug '[?-?]' emojis.txt
Те же результаты получаются с использованием x{hhhh}
чтобы выбрать диапазон символов Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
Чтобы отобразить линии, содержащие имена Gödel (или Goedel), Escher или Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
Для поиска lorem
в нижнем или верхнем регистре в файле UTF-16, который отмечен UTF-16 BOM:
ug -iw 'lorem' utf16lorem.txt
Для поиска utf16lorem.txt, когда в этом файле нет UTF-16 BOM, используя --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
Для поиска файла spanish-iso.txt
закодированного в ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
? Вернуться к содержимому
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
Несколько строк могут быть сопоставлены с шаблонами, которые соответствуют символам Newline. Используйте опцию -o
, чтобы вывести только совпадение, а не полные линии (ы), которые совпадают.
Чтобы соответствовать разрыву линии n
, включите n
в шаблон, чтобы соответствовать символу LF. Если вы хотите соответствовать разрыву строки rn
и n
, используйте r?n
или просто используйте R
, чтобы соответствовать любому разрыву строки Unicode rn
, r
, v
, f
, n
, u +0085, U+2028 и U+2029.
Чтобы соответствовать C/C ++ /*...*/
Многострочные комментарии:
ug '/*(.*n)*?.**+/' myfile.cpp
Чтобы соответствовать комментариям C/C ++ с использованием предварительно определенных шаблонов c/comments
с -fc/comments
, ограниченными соответствующей частью только с помощью опции -o
:
ug -of c/comments myfile.cpp
То же, что и sed -n '/begin/,/end/p'
: соответствовать всем линиям между линией, содержащей begin
, и первой строкой после этого, содержащего end
, используя ленивое повторение:
ug -o '.*begin(.|n)*?end.*' myfile.txt
? Вернуться к содержимому
-A NUM, --after-context=NUM
Output NUM lines of trailing context after matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns after
the match or shortens the match. See also options -B, -C and -y.
-B NUM, --before-context=NUM
Output NUM lines of leading context before matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns before
the match or shortens the match. See also options -A, -C and -y.
-C NUM, --context=NUM
Output NUM lines of leading and trailing context surrounding each
matching line. Places a --group-separator between contiguous
groups of matches. If -o is specified, output the match with
context to fit NUM columns before and after the match or shortens
the match. See also options -A, -B and -y.
-y, --any-line
Any line is output (passthru). Non-matching lines are output as
context with a `-' separator. See also options -A, -B, and -C.
--width[=NUM]
Truncate the output to NUM visible characters per line. The width
of the terminal window is used if NUM is not specified. Note that
double wide characters in the output may result in wider lines.
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
Чтобы отобразить две строки контекста до и после подходящей линии:
ug -C2 'FIXME' myfile.cpp
Чтобы показать три строки контекста после подходящей линии:
ug -A3 'FIXME.*' myfile.cpp:
Чтобы отобразить одну строку контекста перед каждой соответствующей строкой с определением функции C (C имена не являются Unicode):
ug -B1 -f c/functions myfile.c
Чтобы отобразить одну строку контекста перед каждой соответствующей строкой с определением функции C ++ (имена C ++ может быть Unicode):
ug -B1 -f c++/functions myfile.cpp
Чтобы отобразить любые не сопоставляющие строки в качестве контекста для соответствия строк с -y
:
ug -y -f c++/functions myfile.cpp
Чтобы отобразить гексдумп подходящей линии с одной линией контекста Hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
Контекст в линии отображается с опцией -o
с опцией контекста:
ug -o -C20 'pattern' myfile.cpp
То же самое, но с красивым выводом с заголовками, номерами строк и номерами столбцов ( -k
) и показывающим контекст:
ug --pretty -oC20 'pattern' myfile.cpp
? Вернуться к содержанию
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Типы файлов перечислены с ugrep -tlist
. Список основан на расширениях имени файла и «магических байтах». Если у вас есть тип файла, который не указан, используйте параметры -O
и/или -M
. Возможно, вы захотите определить псевдоним, например, alias ugft='ugrep -Oft'
как сокращение для поиска файлов с суффиксом имени файла .ft
.
Рекурсивно отобразить определения функций в файлах C/C ++ ( .h
, .hpp
, .c
, .cpp
и т. Д.) с номерами строк с -tc++
, -o
, -n
и -f c++/functions
:
ug -on -tc++ -f c++/functions
Чтобы рекурсивно отобразить определения функций в файлах .c
и .cpp
с номерами строк с -Oc,cpp
, -o
, -n
и -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
Чтобы рекурсивно перечислить все файлы оболочки с -tShell
чтобы соответствовать расширениям имени файла и файлов с Shell Shebangs, кроме файлов с суффиксом .sh
:
ug -l -tShell -O^sh ''
Чтобы рекурсивно перечислить все не -оболочки с помощью -t^Shell
:
ug -l -t^Shell ''
Рекурсивно перечислить все файлы оболочки с оболочкой Shebangs, у которых нет расширений имени файла оболочки:
ug -l -tShell -t^shell ''
Для поиска строк с FIXME
в комментариях C/C ++, исключая FIXME
в многострочных строках:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
Для чтения шаблонов TODO
и FIXME
из стандартного ввода, чтобы соответствовать линиям в входе, исключая совпадения в строках C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
Чтобы отобразить теги элемента и атрибута XML в файле XML, ограниченную соответствующей частью с -o
, исключая теги, которые размещены в (многострочные) комментарии:
ug -o -f xml/tags -f xml/zap_comments myfile.xml
? Вернуться к содержимому
-z, --decompress
Search compressed files and archives. Archives (.cpio, .pax, .tar)
and compressed archives (e.g. .zip, .7z, .taz, .tgz, .tpz, .tbz,
.tbz2, .tb2, .tz2, .tlz, .txz, .tzst) are searched and matching
pathnames of files in archives are output in braces. When used
with option --zmax=NUM, searches the contents of compressed files
and archives stored within archives up to NUM levels. If -g, -O,
-M, or -t is specified, searches files stored in archives whose
filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively.
Supported compression formats: gzip (.gz), compress (.Z), zip, 7z,
bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
lzma and xz (requires suffix .lzma, .tlz, .xz, .txz),
lz4 (requires suffix .lz4),
zstd (requires suffix .zst, .zstd, .tzst),
brotli (requires suffix .br),
bzip3 (requires suffix .bz3).
--zmax=NUM
When used with option -z (--decompress), searches the contents of
compressed files and archives stored within archives by up to NUM
expansion stages. The default --zmax=1 only permits searching
uncompressed files stored in cpio, pax, tar, zip and 7z archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar, zip and 7z archives. NUM
may range from 1 to 99 for up to 99 decompression and de-archiving
steps. Increasing NUM values gradually degrades performance.
Файлы, сжатые с помощью Gzip ( .gz
), сжатия ( .Z
), bzip2 ( .bz
, .bz2
, .bzip2
), lzma ( .lzma
), xz ( .xz
), lz4 ( .lz4
), zstd ( .zst
,, .zstd
), brotli ( .br
) и bzip3 ( .bz3
) с опцией -z
, когда соответствующие библиотеки установлены и скомпилированы с UGREP. Эта опция не требует сжатия файлов. Несоцененные файлы также ищут также, хотя и медленнее.
Другие форматы сжатия можно искать с помощью фильтров UGREP .
Архивы (CPIO, JAR, PAX, TAR, ZIP и 7Z) выполняются с опцией -z
. Регулярные файлы в архиве, который соответствует выводу с архивными путями, заключенными в брекеты {
и }
. Поддерживаемые форматы смолы V7, USTAR, GNU, OldGNU и PAX. Поддерживаемые форматы CPIO являются ODC, NEWC и CRC. Не поддерживается устаревший невоздушный старый бинарный бинарный формат CPIO. Форматы архива CPIO, TAR и PAX автоматически распознаются с помощью опции -z
на основе их содержания, независимо от суффикса имени файла.
По умолчанию также поиск в архивах ZIP, хранящихся в архивах ZIP: все файлы CPIO, PAX и TAR, хранящиеся в архивах ZIP и 7Z, автоматически распознаются и искали. Однако, по умолчанию, сжатые файлы, хранящиеся в архивах, не распознаются, например, файлы ZIP, хранящиеся в файлах TAR, не ищут, а все сжатые файлы и архивы ищут, как если бы они представляют собой двоичные файлы без их распаковки.
Укажите --zmax=NUM
для поиска архивов, которые содержат сжатые файлы и архивы для глубины NUM
. Значение NUM
может варьироваться от 1 до 99 для до 99 шагов декомпрессии и де-архивирования для расширения до 99 вложенных архивов. Больше --zmax=NUM
значения деградируют производительность. Вряд ли вам когда -либо понадобится 99 AS --zmax=2
достаточно для большинства практических вариантов использования, таких как поиск файлов Zip, хранящихся в файлах TAR.
Когда опция -z
используется с параметрами -g
, -O
, -M
или -t
, архивами и сжатыми и несжаемыми файлами, которые соответствуют критериям выбора файла (глобус, расширение, магические байты или тип файла) только поиск. Например, ugrep -r -z -tc++
ищет файлы c ++, такие как main.cpp
и zip и tar -архивы, которые содержат файлы c ++, такие как main.cpp
. Также в поиске включены сжатые файлы C ++, такие как main.cpp.gz
и main.cpp.xz
при наличии. Кроме того, любые архивы CPIO, PAX, TAR, ZIP и 7Z, когда они находятся в настоящих файлах C ++, которые они содержат, такие как main.cpp
. Используйте опцию --stats
, чтобы увидеть список шаблонов глобуса, применяемых для фильтрации путей файла в рекурсивном поиске и при поиске содержимого архива.
Когда опция -z
используется с параметрами -g
, -O
, -M
или -t
для поиска архивов CPIO, JAR, PAX, TAR, ZIP и 7Z, архивные файлы, соответствующие критериям выбора файла, исходят только.
Форматы GZIP, сжатия и ZIP автоматически обнаруживаются, что полезно при чтении данных с распределением GZIP с стандартного входа, например, входного входа, перенаправленного из трубы. Другие форматы сжатия требуют суффикса имени файла: .bz
, .bz2
, или .bzip2
для bzip2, .lzma
для lzma, .xz
для xz, .lz4
для lz4, .zst
или .zstd
для zstd, .br
для brotli и .bz3
для Bzip3. Также сжатые архив -архивные ограничения .taz
, .tgz
и .tpz
для Gzip, .tbz
, .tbz2
, .tb2
и .tz2
для Bzip2, .tlz
для lzma, .txz
для xz и .tzst
для zstd распознаются. Чтобы найти эти форматы с UGREP с стандартного ввода, используйте опцию --label='stdin.bz2'
для Bzip2, --label='stdin.lzma'
для lzma, --label='stdin.xz'
для xz, --label='stdin.lz4
для lz4 и --label='stdin.zst
для zstd и так далее. Имя stdin
произвольное и может быть опущено:
формат | Суффикс имени файла | TAR/PAX ARCHIVE Короткий суффикс | Требуется суффикс? | Ugrep от Stdin | библиотека |
---|---|---|---|---|---|
gzip | .gz | .taz , .tgz , .tpz | нет | автоматический | либ |
компресс | .Z | .taZ , .tZ | нет | автоматический | встроенный |
молния | .zip , .zipx , .ZIP | нет | автоматический | либ | |
7zip | .7z | да | --label=.7z | встроенный | |
Bzip2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | да | --label=.bz2 | libbz2 |
лзма | .lzma | .tlz | да | --label=.lzma | liblzma |
хз | .xz | .txz | да | --label=.xz | liblzma |
лз4 | .lz4 | да | --label=.lz4 | liblz4 | |
zstd | .zst , .zstd | .tzst | да | --label=.zst | libzstd |
Бротли | .br | да | --label=.br | Libbrotlidec | |
Bzip3 | .bz3 | да | --label=.bz3 | libbzip3 |
Форматы GZIP, BZIP2, XZ, LZ4 и ZSTD поддерживают конкатенированные сжатые файлы. Согласованные сжатые файлы ищут как один файл.
Поддерживаемые методы сжатия на молнии хранятся (0), дефлятные (8), BZIP2 (12), LZMA (14), XZ (95) и ZSTD (93). Методы BZIP2, LZMA, XZ и ZSTD требуют, чтобы UGREP был составлен с соответствующими библиотеками сжатия.
Поиск зашифрованных ZIP -архивов не поддерживается (возможно, в будущих выпусках, в зависимости от запросов на улучшения).
Поиск Archives 7ZIP занимает гораздо больше оперативной памяти и больше времени по сравнению с другими методами. Реализация 7ZIP LZMA SDK не поддерживает потоковую передачу, требуя физического файла 7Z. Это означает, что файлы 7Z не могут быть поиска, когда они вложены в архив. Лучше всего избегать 7zip. Поддержка 7ZIP может быть отключена с ./build.sh --disable-7zip
для построения UGREP.
Опция -z
использует потоки для параллелизма задачи, чтобы ускорить поиск более крупных файлов, одновременно запустив декомпрессор с поиском декомпрессированного потока.
Чтобы перечислить все непустые файлы, хранящиеся в архиве package.zip
.
ug --zmax=2 -z -l '' package.zip
То же самое, но только перечислите файлы исходного кода Python, включая сценарии, которые вызывают Python, с опцией -tPython
( ugrep -tlist
для получения подробной информации):
ug --zmax=2 -z -l -tPython '' package.zip
Для поиска приложений Python, распределенных как файл TAR с их зависимостями, включает в себя как колеса (zip -файлы с кодом Python), поиск слова my_class
in app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
Чтобы рекурсивно искать файлы C ++, включая сжатые файлы для слова my_function
, в то время как пропуски C и C ++ Комментарии:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
Для поиска BZIP2, LZMA, XZ, LZ4 и ZSTD сжатые данные при стандартном входе, опция --label
может использоваться для указания расширения, соответствующего формату сжатия для усиления декомпрессии, когда расширение BZIP2 не доступно для UGREP, например:: Например::
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
Для поиска файла main.cpp
в project.zip
для строк TODO
и FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
Для поиска tarball project.tar.gz
для файлов c ++ с помощью линий TODO
и FIXME
:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
Для поиска файлов, соответствующих глобусу *.txt
в project.zip
для license
в любом случае (обратите внимание, что аргумент -g
Glob должен быть указан):
ug -z -g '*.txt' -w -i 'license' project.zip
Чтобы отобразить и страдать через все файлы C ++ в Tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
Чтобы перечислить файлы, соответствующие стилю Gitignore Glob /**/projects/project1.*
в projects.tgz
, выбрав файлы, содержащие в архиве текст December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
Чтобы просмотреть данные meta -inf/manifest.mf в файле jar с -Ojar
и -OMF
, чтобы выбрать файл JAR и файл MF в нем ( -Ojar
требуется, в противном случае файл JAR будет пропущен, хотя мы могли его прочитать из вместо этого стандартный ввод):
ug -z -h -OMF,jar '' my.jar
Чтобы извлечь файлы C ++, которые содержат FIXME
из project.tgz
, мы используем -m1
с --format="'%z '"
для создания разделенного пространственным списком путей, расположенных в архиве, который соответствует слову FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
Чтобы выполнить поиск по глубине с find
, затем используйте cpio
и ugrep
для поиска файлов:
find . -depth -print | cpio -o | ugrep -z 'xyz'
? Вернуться к содержимому
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-M MAGIC, --file-magic=MAGIC
Only files matching the signature pattern MAGIC are searched. The
signature "magic bytes" at the start of a file are compared to
the MAGIC regex pattern. When matching, the file will be searched.
When MAGIC is preceded by a `!' or a `^', skip files with matching
MAGIC signatures. This option may be repeated and may be combined
with options -O and -t to expand the search. Every file on the
search path is read, making searches potentially more expensive.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
Рекурсивно перечислить все файлы, которые начинаются с #!
Шебангс:
ug -l -M'#!' ''
Рекурсивно перечислить все файлы, которые начинаются с #
, но не с #!
Шебангс:
ug -l -M'#' -M'^#!' ''
Рекурсивно перечислить все файлы Python (Extension .py
или a Shebang) с -tPython
:
ug -l -tPython ''
Чтобы рекурсивно перечислить все не -оболочки с помощью -t^Shell
:
ug -l -t^Shell ''
To recursively list Python files (extension .py
or a shebang) that have import statements, including hidden files with -.
:
ug -l. -tPython -f python/imports
? Back to table of contents
-Z[best][+-~][MAX], --fuzzy=[best][+-~][MAX]
Fuzzy mode: report approximate pattern matches within MAX errors.
The default is -Z1: one deletion, insertion or substitution is
allowed. If `+`, `-' and/or `~' is specified, then `+' allows
insertions, `-' allows deletions and `~' allows substitutions. For
example, -Z+~3 allows up to three insertions or substitutions, but
no deletions. If `best' is specified, then only the best matching
lines are output with the lowest cost per file. Option -Zbest
requires two passes over a file and cannot be used with standard
input or Boolean queries. Option --sort=best orders matching files
by best match. The first character of an approximate match always
matches a character at the beginning of the pattern. To fuzzy
match the first character, replace it with a `.' or `.?'. Option
-U applies fuzzy matching to ASCII and bytes instead of Unicode
text. No whitespace may be given between -Z and its argument.
The beginning of a pattern always matches the first character of an approximate match as a practical strategy to prevent many false "randomized" matches for short patterns. This also greatly improves search speed. Make the first character optional to optionally match it, eg p?attern
or use a dot as the start of the pattern to match any wide character (but this is slow).
Line feed ( n
) and NUL (