Используя знак зодиака в grep

 <div class="navbar navbar-default navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header" >
               <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                   <span class="sr-only">Toggle navigation</span>
                   <span class="icon-bar"></span>
                   <span class="icon-bar"></span>
                   <span class="icon-bar"></span>

                   </button>
                <a class="navbar-brand" href="Default.aspx"> <span> <img alt="Logo" src="Images/shopify-bag.png"height="35" width="40"/></span> Shopping GO</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-right"></ul>

// Не забыли добавить загрузчик в начало вашего кода.

73
задан Saobi 1 July 2009 в 14:06
поделиться

7 ответов

Звездочка - это просто оператор повторения , но вам нужно указать, что вы повторяете. / * abc * / соответствует строке, содержащей ab и ноль или более c (потому что вторая * находится на c; первая не имеет смысла, потому что ей нечего повторять). Если вы хотите сопоставить что-либо, вам нужно сказать . * - точка означает любой символ ( в рамках определенных правил ). Если вы хотите просто сопоставить abc, вы можете просто сказать grep 'abc' myFile . Для более сложного сопоставления вам необходимо использовать . * - grep 'abc. * Def' myFile будет соответствовать строке, содержащей abc, за которой следует def с чем-то, необязательно между ними.

Обновление на основе комментария:

* в регулярном выражении не совсем то же самое, что * в консоли. В консоли * является частью конструкции glob и действует как подстановочный знак (например, ls * .log перечислит все файлы, которые заканчиваются на .log). Однако в регулярных выражениях * является модификатором, что означает, что он применяется только к предшествующему ему символу или группе. Если вы хотите, чтобы * в регулярных выражениях действовал как подстановочный знак, вам нужно использовать . * , как упоминалось ранее - точка - это подстановочный знак, а звездочка при изменении точки означает найти один или больше точки; т.е. найти один или несколько любых персонажей.

в регулярных выражениях * - это модификатор, означающий, что он применяется только к предшествующему ему символу или группе. Если вы хотите, чтобы * в регулярных выражениях действовал как подстановочный знак, вам нужно использовать . * , как упоминалось ранее - точка является подстановочным знаком, а звездочка при изменении точки означает найти один или больше точки; т.е. найти один или несколько любых персонажей.

в регулярных выражениях * - это модификатор, означающий, что он применяется только к предшествующему ему символу или группе. Если вы хотите, чтобы * в регулярных выражениях действовал как подстановочный знак, вам нужно использовать . * , как упоминалось ранее - точка является подстановочным знаком, а звездочка при изменении точки означает найти один или больше точки; т.е. найти один или несколько любых персонажей.

107
ответ дан 24 November 2019 в 12:16
поделиться

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

17
ответ дан 24 November 2019 в 12:16
поделиться

"Знак зодиака" имеет значение только в том случае, если перед ним что-то есть. Если инструмента нет (в данном случае grep), это может просто обработать его как ошибку. Например:

'*xyz'    is meaningless
'a*xyz'   means zero or more occurrences of 'a' followed by xyz
13
ответ дан 24 November 2019 в 12:16
поделиться

Попробуйте grep -E для поддержки расширенных регулярных выражений

Также посмотрите:

Справочную страницу grep

3
ответ дан 24 November 2019 в 12:16
поделиться

Используйте команду grep -P -, которая включает поддержку регулярных выражений в стиле Perl.

grep -P "abc.*def" myfile
4
ответ дан 24 November 2019 в 12:16
поделиться

'*' работает как модификатор для предыдущего элемента. Итак, 'abc * def' ищет 'ab', за которым следует 0 или более 'c, за которыми следует' def '.

Вы, вероятно, захотите' abc. * Def ', который ищет' abc ', за которым следует любое количество символов , за которым следует def.

0
ответ дан 24 November 2019 в 12:16
поделиться

Выражение, которое вы пробовали, подобно тем, которые работают, например, в командной строке оболочки в Linux, называется « glob ». Выражения Glob - это неполные регулярные выражения , которые grep использует для определения строк, которые нужно искать. Здесь есть (старый, маленький) пост о различиях. Выражения glob (например, "ls *") интерпретируются самой оболочкой.

Можно преобразовать глобусы в RE, но обычно вам нужно делать это в уме.

6
ответ дан 24 November 2019 в 12:16
поделиться
Другие вопросы по тегам:

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