Используйте синтаксис grep --exclude / - include, чтобы не просматривать определенные файлы

1) grep полное имя из state.name и использовать его для индексации в state.abb:

state.abb[grep("New York", state.name)]
## [1] "NY"

2) или создать вектор сокращений состояний, имена которых являются полными именами и индексируйте его, используя полное имя:

setNames(state.abb, state.name)["New York"]
## New York 
##     "NY" 

В отличие от (1), этот работает, даже если «Нью-Йорк» заменен вектором имен полного состояния, например setNames(state.abb, state.name)[c("New York", "Idaho")]

728
задан random 13 March 2017 в 14:04
поделиться

12 ответов

Используйте оболочку globbing синтаксис:

grep pattern -r --include=\*.{cpp,h} rootdir

синтаксис для --exclude идентичен.

Примечание, что звезды оставляют с обратной косой чертой, чтобы препятствовать тому, чтобы он был расширен оболочкой (заключающий его в кавычки, такой как --include="*.{cpp,h}", работал бы точно также). Иначе, если бы у Вас были какие-либо файлы в текущем рабочем каталоге, который соответствовал шаблону, командная строка расширилась бы до чего-то как grep pattern -r --include=foo.cpp --include=bar.h rootdir, который только искал бы файлы, названные foo.cpp и bar.h, который довольно вероятен не, что Вы хотели.

706
ответ дан Adam Rosenfield 13 March 2017 в 14:04
поделиться

те сценарии не выполняют всю проблему... Попробуйте это лучше:

du -ha | grep -i -o "\./.*" | grep -v "\.svn\|another_file\|another_folder" | xargs grep -i -n "$1"

этот сценарий так лучше, потому что он использует "реальные" регулярные выражения для предотвращения каталогов от поиска. просто отдельная папка или имена файлов с "\|" на grep-v

обладают им! найденный на моей оболочке Linux! XD

2
ответ дан 13 March 2017 в 14:04
поделиться

найдите и xargs являются Вашими друзьями. Используйте их для фильтрации списка файлов, а не grep's - исключают

Попытка что-то как

find . -not -name '*.png' -o -type f -print | xargs grep -icl "foo="
2
ответ дан Andrew Stein 13 March 2017 в 14:04
поделиться

Попробуйте этого:

 $ find . -name "*.txt" -type f -print | xargs file | grep "foo=" | cut -d: -f1

Основанный здесь: http://www.unix.com/shell-programming-scripting/42573-search-files-excluding-binary-files.html

3
ответ дан Gravstar 13 March 2017 в 14:04
поделиться

Я нахожу, что захват вывода grep иногда очень полезен:

grep -rn "foo=" . | grep -v "Binary file"

, Хотя, который на самом деле не мешает ему искать двоичные файлы.

9
ответ дан Aaron Maenpaa 13 March 2017 в 14:04
поделиться

Смотрите на ack, который разработан для точно этих ситуаций. Ваш пример

grep -ircl --exclude=*.{png,jpg} "foo=" *

сделан с ack как

ack -icl "foo="

, потому что ack никогда не смотрит в двоичных файлах по умолчанию, и-r идет по умолчанию. И если Вы хотите только CPP и файлы H, тогда просто сделайте

ack -icl --cpp "foo="
62
ответ дан Andy Lester 13 March 2017 в 14:04
поделиться

Если Вы просто хотите пропустить двоичные файлы, я предлагаю, чтобы Вы посмотрели -I (верхний регистр i) опция. Это игнорирует двоичные файлы. Я регулярно использую следующую команду:

grep -rI --exclude-dir="\.svn" "pattern" *

Это ищет рекурсивно, игнорирует двоичные файлы и не смотрит в скрытых папках Subversion для любого шаблона, который я хочу. Мне исказили его как "grepsvn" на моем поле на работе.

213
ответ дан KeithWM 13 March 2017 в 14:04
поделиться

Предложенная команда:

grep -Ir --exclude="*\.svn*" "pattern" *

является концептуально неправильным, потому что - исключают работы над базовым именем. Помещенный, другими словами, это пропустит только .svn в текущем каталоге.

12
ответ дан 14 March 2017 в 00:04
поделиться

grep 2.5.3 представил - параметр исключать-dir, который будет работать способ, которым Вы хотите.

grep -rI --exclude-dir=\.svn PATTERN .

можно также установить переменную среды: GREP_OPTIONS = "-исключать-dir =. svn"

я буду второй Andy голосование за ack, хотя, это является лучшим.

34
ответ дан Community 14 March 2017 в 00:04
поделиться
  • 1
    Мои извинения это работало. Я был перепутан с todayHighlight, кто выбирает текущую дату. – evanx 19 January 2013 в 17:30

--binary-files=without-match опция к GNU grep заставляет это пропускать двоичные файлы. (Эквивалентный -I переключатель упоминается в другом месте.)

(Это могло бы потребовать последней версии grep; 2.5.3 имеет его, по крайней мере.)

1
ответ дан 22 November 2019 в 21:26
поделиться

Я дилетант, конечно, но вот как выглядит мой ~ / .bash_profile:

export GREP_OPTIONS="-orl --exclude-dir=.svn --exclude-dir=.cache --color=auto" GREP_COLOR='1;32'

Обратите внимание, что для исключения двух каталогов мне пришлось дважды использовать --exclude-dir.

5
ответ дан 22 November 2019 в 21:26
поделиться

В grep 2.5.1 вы должны добавить эту строку в ~/.bashrc или ~/.bash profile

export GREP_OPTIONS="--exclude=\*.svn\*"
11
ответ дан 22 November 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: