Unix 'find' + 'grep' синтаксис против awk - PullRequest
3 голосов
/ 22 июня 2009

Я использовал эту строку, чтобы найти фразу «B206» в файлах в каталоге, в котором я находился, и во всех его подкаталогах.

find . -exec grep -s "B206" '{}' \; -print 

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

Например, он постоянно падает, когда попадает в jpg-файл, который находится в подкаталоге. Строка заголовка изменится, и на экране появится:

ÐF»*rkNQeË+Z׳kU£~MÞçÄZ½ªéúýØâÑn¡[U+Þ4ªÒ9/ê£<ú¯4}[IÓ­îÃ¥K»G%ݳ¢

Вынуждая меня снова нажать Ctrl + C, а затем выйти.

Есть ли способ добавить в эту строку код, исключающий файлы jpg? Еще лучше, кусок кода, где я могу добавить список расширений, чтобы исключить?


РЕДАКТИРОВАТЬ:
-не & -Я у меня не работает
Я нашел этот похожий вопрос , также связанный с моим

Ответы [ 12 ]

1 голос
/ 22 июня 2009

Если у вас есть доступ к gfind, просто добавьте "-not -name '* .jpg'" к выражению.

gfind . -not -name '*.jpg' -exec grep -s "B206" '{}' \; -print

Другой вариант (не необходимый для этой задачи, но полезный трюк), если вы хотите использовать действительно необычные регулярные выражения, сделать

найти some_easy_high_level_filter_expression -ls | perl -pe '{/ your_Perl_RegExp_of_choice /}'> ./files_to_search_in

grep options 'cat ./files_to_search_in'

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

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

0 голосов
/ 22 июня 2009

grep -I -r "строка" *

...