2010-07-14 4 views
61

Я использую инструмент grep-типа для поиска чисто литеральных строк. Я ищу появление строки файла журнала, как часть строки в отдельном файле журнала. Текст поиска может содержать всевозможные специальные символы регулярного выражения, например, []().*^$-\.Grep для литеральных строк

Есть ли утилита поиска Unix, которая не будет использовать регулярное выражение, а просто поиск литералов вхождения строки?

+0

Wonder почему вопрос не было _ «Могу ли я сделать' grep' поиск литеральных строк? »_ вместо _« Есть ли что-то вроде 'grep', которое может искать литеральные строки?» _ Отвертки с плоской головкой могут соответствовать крепежным винтам Philips, вы know ';)' – ADTC

ответ

88

Вы можете использовать grep для этого с опцией -F.

-F, --fixed-strings  PATTERN is a set of newline-separated fixed strings 
+0

* «Фиксированные строки, разделенные новой строкой» * Как это сделать в командной строке терминала? Я знаю, что могу создать файл шаблона, но без файла, можно ли это сделать в подсказке? Нажатие Enter явно выполняет команду. – ADTC

+3

* Я отвечу на свой вопрос. :) * Вам просто нужно предоставить несколько фиксированных строк, используя повторы опции -e. Например: 'grep -F -e 'fixed1" -e "fixed2" -e "fixed3" -e "fixed4" '. Не требуется новых строк;) – ADTC

+1

Недоступно в Solaris. Вместо этого используется 'fgrep'. – majkinetor

7

Это либо fgrep или grep -F, которые не будут делать регулярные выражения. fgrep идентичен grep -F, но я предпочитаю не придется беспокоиться об аргументах, будучи по своей природе ленив :-)

grep -> grep 
fgrep -> grep -F (fixed) 
egrep -> grep -E (extended) 
rgrep -> grep -r (recursive, on platforms that support it). 
+0

Для GNU grep fgrep предоставляется только как символическая ссылка на grep, что заставляет его принимать -F – Daenyth

+3

'egrep' и' fgrep 'не указаны стандартом POSIX; 'grep -F' и' grep -E' [are] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) –

3

вы также можете использовать AWK, так как он имеет возможность найти фиксированную строку, а также программирование возможности, например, только

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file 
0
cat list.txt 
one:hello:world 
two:2:nothello 

three:3:kudos 

grep --color=always -F"hello 

three" list.txt 

выход

one:hello:world 
three:3:kudos 
+1

Это ничего не добавляет к существующему принятому ответу. –

+0

Я не согласен. Это полезная иллюстрация того, как это работает. – timwaagh

Смежные вопросы