Одной из хороших вещей о vi является своя логическая структура команды. d
сопровождаемый командой движения удаляет к цели того движения. $
перемещения в конец строки (мнемосхема: как в regexps). Так d$
удаляет в конец строки. Точно так же e
перемещения в конец текущего слова, и w
перемещения к началу следующего слова; так de
удаляет конец текущего слова, и dw
дополнительно удаляет следующий пробел.
Исторически эти переключатели были обеспечены в отдельных двоичных файлах. В некоторых действительно старых системах Unix Вы найдете, что необходимо назвать отдельные двоичные файлы, но во всех современных системах предпочтены переключатели. Страница справочника для grep имеет детали об этом.
Что касается того, что они делают, -E
переключатели grep в специальный режим так, чтобы выражение было оценено как ДО (Расширенное регулярное выражение) в противоположность его нормальному сопоставлению с образцом. Детали этого синтаксиса находятся на странице справочника.
-E, --extended-regexp
Интерпретируйте ШАБЛОН как расширенное регулярное выражение
-F
переключитесь переключает grep в другой режим, где он принимает, что шаблон соответствует, но затем разделяет тот шаблон на одну строку поиска на строку и делает ИЛИ ищет на любой из строк, не делая никакого специального сопоставления с образцом.
-F, --fixed-strings
Интерпретируйте ШАБЛОН как список фиксированных строк, разделенных новыми строками, любая из которых должна быть подобрана.
Вот некоторые сценарии в качестве примера:
У Вас есть файл со списком, говорят что десять имен пользователей Unix в простом тексте. Вы хотите искать файл группы на своей машине, чтобы видеть, находится ли какой-либо из этих десяти перечисленных пользователей в каких-либо специальных группах:
grep -F -f user_list.txt /etc/group
Причина -F
переключатель помогает, вот то, что имена пользователей в Вашем файле шаблона интерпретируются как строки обычного текста. Точки, например, были бы интерпретированы как точки, а не подстановочные знаки.
Вы хотите искать использование необычного выражения. Например, круглая скобка ()
может использоваться для указания на группы с |
используемый в качестве операции ИЛИ. Вы могли выполнить это поисковое использование -E
:
grep -E '^no(fork|group)' /etc/group
... к возвратным линиям, которые запускаются или с "nofork" или с "nogroup". Без -E
переключатель необходимо было бы выйти из специальных символов, включенных, потому что с нормальным сопоставлением с образцом они будут просто искать тот точный шаблон;
grep '^no\(fork\|group\)' /etc/group
От man grep
:
egrep is the same as grep -E. fgrep is the same as grep -F. Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified.
Вы используете fgrep
или grep -F
если Вы не хотите, чтобы захваченная строка была интерпретирована как шаблон.
Вы используете egrep
или grep -E
если необходимо использовать расширенный regexp.
egrep
и fgrep
в основном эквивалентны grep -E
и grep -F
(соответственно):
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see
below). (-E is specified by POSIX.)
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
Сообщения об ошибках могли бы отличаться все же.
От "человека grep":
три различных программы egrep, fgrep и rgrep доступны. egrep совпадает с grep-E. fgrep, совпадает с grep-F. rgrep, совпадает с grep-r. Прямой вызов или как egrep или как fgrep удерживается от использования, но обеспечивается для разрешения исторических приложений, которые полагаются на них для выполнения неизмененный.
Если вы ищете строку Verbatim, и хотите, чтобы быть уверены, что строка, которую вы пройдены, интерпретирован VERBATIM (т.е. без рискуя, чтобы сказать, что точка или вопросительный знак будет интерпретировать как что-то другое) FGREP или EGEREP -F.
Что касается разницы между EXEP и GREP, я думаю, что egeep - большую часть времени, которое вы хотите. Ручной участок GNU перечисляет различия между GreeP и EXEP, который, похоже, лежит в синтаксисе: некоторые вещи требуют косых, в то время как другие не делают. Я думаю, что egeeP более «совместим» с Perl Regexps и JavaScript Regexps, поэтому мне легче использовать EXEP.
кстати. Я действительно поощряю вас дать ACK ACK . Немного проще набрать ACK, чем Greep -e).
egrep
илиfgrep
;-E
и-F
являются стандартными. Существуют на самом деле маленькие несовместимости вegrep
: это рассматривает{
немного по-другому. – Gilles 'SO- stop being evil' 04.08.2011, 02:59fgrep
использует бэкенд Aho-Corasick, в то время какgrep
использует измененную версию Commentz-Walter. Это означает этоgrep
имеет худший случай O (млн) сложность в то время какfgrep
в худшем случае O (m+n). – Slater Victoroff 26.06.2015, 23:53