Intereting Posts
метаданные репозитория (repomd.xml) для хранилища: mratwork-centalt Инструмент скриншотов Linux Mint аутентификация pam ldap – AWS EC2 ami (Amazon's ami) Как заставить yaourt устанавливать все обновления Синтаксис Vim выделяет определенные строки Символы / программные ссылки с цветовой координацией на основе того, на что они ссылаются Устанавливается ImageMagick7-7.0.1.5 на FreeBSD 10.3, но после установки команды `import` нет Как использовать команду оболочки, чтобы показывать только первый столбец и последний столбец в текстовом файле? Отключение системного модального поведения запросов пароля GNOME 3 Эволюция продолжает исчезать? Как (Ограниченная память)> grep -F -f file_A file_B >> output.txt Как отключить звуковой сигнал только в вкладке bash-complete Почему команда rename не работает так, как ожидалось? Удаление неправильной записи WINS Apache mod_auth_kerb: «Запись в ключевой таблице не найдена»

grep, похоже, игнорирует – include

man grep говорит

 grep [OPTIONS] PATTERN [FILE...] . . . --include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude). 

Итак, я набрал

 grep --include="*.html" 'li' * 

для поиска экземпляров li в файлах HTML в текущем каталоге. Вместо этого я получаю список каждого использования li любом месте каталога, даже в файлах, отличных от HTML. Что я делаю не так? Я пробовал всевозможные варианты, например

 grep --include=\*.html 'li' * 

но без везения.

--include=PATTERN работает только при добавлении -r

 $ grep -r --include='*.html' 'li' . -R, -r, --recursive Read all files under each directory, recursively; this is equivalent to the -d recurse option. --include=PATTERN Recurse in directories only searching file matching PATTERN. --exclude=PATTERN Recurse in directories skip file matching PATTERN. 

Оболочка, которую вы используете (bash, tsh, zsh и т. Д.), Будет диктовать флешинг командной строки, который будет работать и не будет работать. Большинство людей используют bash, потому что он установлен по умолчанию во многих дистрибутивах – я использую bash.

Для меня всегда работал следующий синтаксис.

  grep -r --include=*.html li * 
  1. Как упоминалось выше, ключ -r позволяет grep искать подкаталоги, иначе это не будет, что делает его похожим на неудачу grep.
  2. Включение простых типов файлов (одно расширение) не требует подмены.
  3. Не указывайте (одиночное или двойное) включение, парсер не нравится

Для включения множественных расширений я использую расширение bash brace.

  grep -r --include=*.{html,htm,js} li * 

Другие вещи, чтобы попытаться, если у вас все еще есть проблемы

  1. Побег *, чтобы защитить его, когда он разобран оболочкой

     grep -r --include=\*.html li * 
  2. Сделать путь поиска более явным

     grep -r --include=\*.html li ./* 

надеюсь, это поможет

find $directoryname -maxdepth 1 -name '*.html' | xargs grep 'li' find $directoryname -maxdepth 1 -name '*.html' | xargs grep 'li' Здесь -maxdepth 1 предназначен для поиска только в каталоге, а не в его подкаталогах. Если вы хотите выполнить поиск даже в подкаталоге remove -maxdepth 1 в команде.

grep -version не работает, но grep --version дает

 grep (GNU grep) 2.9 

и заявление об авторском праве.


 grep 'li' *.html 

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


Сначала я попробовал команду с -R (или -r ), но это тоже не сработало. Команда рекурсирует, но вызывает файлы без html в имени (или в любом месте пути). Вот и все.


Я бы разместил их как комментарии или отредактировал в оригинале, но по какой-то причине StackExchange неправильно связывает мою учетную запись. (Моды: прокомментируйте это, пожалуйста!)