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")]
Используйте оболочку 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
, который довольно вероятен не, что Вы хотели.
те сценарии не выполняют всю проблему... Попробуйте это лучше:
du -ha | grep -i -o "\./.*" | grep -v "\.svn\|another_file\|another_folder" | xargs grep -i -n "$1"
этот сценарий так лучше, потому что он использует "реальные" регулярные выражения для предотвращения каталогов от поиска. просто отдельная папка или имена файлов с "\|" на grep-v
обладают им! найденный на моей оболочке Linux! XD
найдите и xargs являются Вашими друзьями. Используйте их для фильтрации списка файлов, а не grep's - исключают
Попытка что-то как
find . -not -name '*.png' -o -type f -print | xargs grep -icl "foo="
Попробуйте этого:
$ 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
Я нахожу, что захват вывода grep иногда очень полезен:
grep -rn "foo=" . | grep -v "Binary file"
, Хотя, который на самом деле не мешает ему искать двоичные файлы.
Смотрите на ack, который разработан для точно этих ситуаций. Ваш пример
grep -ircl --exclude=*.{png,jpg} "foo=" *
сделан с ack как
ack -icl "foo="
, потому что ack никогда не смотрит в двоичных файлах по умолчанию, и-r идет по умолчанию. И если Вы хотите только CPP и файлы H, тогда просто сделайте
ack -icl --cpp "foo="
Если Вы просто хотите пропустить двоичные файлы, я предлагаю, чтобы Вы посмотрели -I
(верхний регистр i) опция. Это игнорирует двоичные файлы. Я регулярно использую следующую команду:
grep -rI --exclude-dir="\.svn" "pattern" *
Это ищет рекурсивно, игнорирует двоичные файлы и не смотрит в скрытых папках Subversion для любого шаблона, который я хочу. Мне исказили его как "grepsvn" на моем поле на работе.
Предложенная команда:
grep -Ir --exclude="*\.svn*" "pattern" *
является концептуально неправильным, потому что - исключают работы над базовым именем. Помещенный, другими словами, это пропустит только .svn в текущем каталоге.
grep 2.5.3 представил - параметр исключать-dir, который будет работать способ, которым Вы хотите.
grep -rI --exclude-dir=\.svn PATTERN .
можно также установить переменную среды: GREP_OPTIONS = "-исключать-dir =. svn"
я буду второй Andy голосование за ack, хотя, это является лучшим.
--binary-files=without-match
опция к GNU grep
заставляет это пропускать двоичные файлы. (Эквивалентный -I
переключатель упоминается в другом месте.)
(Это могло бы потребовать последней версии grep
; 2.5.3 имеет его, по крайней мере.)
Я дилетант, конечно, но вот как выглядит мой ~ / .bash_profile:
export GREP_OPTIONS="-orl --exclude-dir=.svn --exclude-dir=.cache --color=auto" GREP_COLOR='1;32'
Обратите внимание, что для исключения двух каталогов мне пришлось дважды использовать --exclude-dir.
В grep 2.5.1 вы должны добавить эту строку в ~/.bashrc или ~/.bash profile
export GREP_OPTIONS="--exclude=\*.svn\*"