Как искать одиночные кавычки и двойные кавычки в поиске grep?

Когда я выполняю поиск bindkey в bindkey zsh plugins для ключевых конфликтов, я получаю ответы от .zsh сценариев .zsh и файлов .md , а некоторые из файлов zsh readme используют двойную кавычку в заявлении bindkey .

Как я могу выполнить поиск для bindkeys, используя ' и " для цитирования? Например, если поиск для использования Ctrl-R первая команда с использованием двойных кавычек для соответствующей строки создает README.md из zsh-navigation-tools и одинарных кавычек создает команду bindkey для v i-mode и zsh-navigation-tools

  • имена файлов grep, имена файлов и содержимое сразу?
  • ssh не показывает полный вывод команды
  • Есть ли какие-либо объективные преимущества для escape-последовательностей по сравнению с tput?
  • Поиск файлов, содержащих определенные строки в каталоге
  • Как я могу показать cd каталог, в который он переключается?
  • Используя sed, чтобы заменить только первые два регулярных выражения с разными строками
  •  grep -r -i 'bindkey "^r' ~/.oh-my-zsh/plugins 

    вывод:

     zsh-navigation-tools/README.md: bindkey "^R" znt-history-widget 
     grep -r -i "bindkey '^r" ~/.oh-my-zsh/plugins 

    вывод:

     vi-mode/vi-mode.plugin.zsh:bindkey '^r' history-incremental-search-backward zsh-navigation-tools/zsh-navigation-tools.plugin.zsh:bindkey '^R' znt-history-widget 

    Как я могу создать команду, которая выведет все 3?

    Имеет ли grep возможность указать альтернативный символ цитирования, который позволит ' и " как литералы?

  • case + как реализовать равный или меньше или больше в случае синтаксиса
  • Что означает обратная косая черта при поиске десятичных знаков
  • Почему sendmail работает по-разному в разных оболочках?
  • Использование wget и grep для загрузки HTML-страниц и фильтрации по ключевым словам
  • Как группировать результаты grep?
  • awk repeat {n} не работает
  • 2 Solutions collect form web for “Как искать одиночные кавычки и двойные кавычки в поиске grep?”

    Конечно, вам нужно избежать символа ^ :

     grep -r 'bindkey "\^r' dir 

    Затем вы можете использовать альтернативный символ расширенного регулярного выражения '|':

     grep -E 'bindkey "\^r''|'"bindkey '\^r" dir 

    Который может быть уменьшен до:

    grep -E 'bindkey ("|'"')"'\^r' dir [1]

    Или, если вы используете bash, ksh или zsh, используйте $' quoting (оба «и» могут быть экранированы):

     grep -E $'bindkey (\"|\')\^r' dir 

    И, наконец, поймите, что есть два r : r и R :

     grep -rE $'bindkey (\"|\')\^(r|R)' dir 

    Или используйте i (но это также изменит и другие символы):

     grep -riE $'bindkey (\"|\')\^r' dir 

    Конечно, это также регулярное выражение perl (GNU grep):

     grep -rP $'bindkey (\"|\')\^(r|R)' dir 

    [1] Может быть, трудно понять цитату.
    Но это просто конкатенация трех цитируемых частей.
    Строка, цитируемая одинарными кавычками, за которой следует строка с двойными кавычками, за которой следует третья строка, процитированная снова с одинарными кавычками. Самый простой способ увидеть efect – это повторить его. Оболочка удалит один уровень цитирования, и строка, которую фактически получает команда, становится ясной:

     $ echo grep -E 'bindkey ("|' "')" '\^r' dir grep -E bindkey ("| ') \^r dir 

    Возможно, было бы легче увидеть:

     $ echo grep -E 'a'"b"'c' dir grep -E abc dir 

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

     $ echo grep -E 'bindkey ("|'\'')\^r' dir grep -E bindkey ("|')\^r dir 

    Или внутри двойных кавычек (двойная кавычка может быть скрыта в двойных кавычках). С дополнительным риском, что некоторые другие символы ($, `, \, * и @) имеют особое значение внутри двойных кавычек (не внутри одиночных кавычек):

     $ echo grep -E "bindkey (\"|')\^r" dir grep -E bindkey ("|')\^r dir 

    Альтернативой является использование списка символов […] с \' и \" :

     $ grep -E 'bindkey '[\"\']'\^r' dir 

    Это все еще строка из трех частей, но середина не цитируется (и нет пробелов):

     'bindkey ' [\"\'] '\^r' 

    Надеюсь это поможет.

    С параметром P ( --perl-regexp ) и классом символов [...] :

     grep -Pri 'bindkey [\047\042]\^r' ~/.oh-my-zsh/plugins 

    • [\047\042] – соответствует либо одиночной кавычки \047 либо двойной кавычки \042
    Linux и Unix - лучшая ОС в мире.