Какая польза от? в команде grep .. и практическое использование

11764
RBA

Я пытался найти реальное практическое применение? например, для "egrep a? filename", но не смог найти ни одного .. Он возвращает все результаты ..

Итак, пожалуйста, помогите мне, где я мог знать фактическое использование egrep? команда ..

Если я использую «a?», Он возвращает все результаты, т.е. строки или строки. который имеет 0 а, 1 а, 2 а и т. д. т.е. я не могу найти использование того же самого ..

Спасибо

4

4 ответа на вопрос

8
RichieHindle

Допустим, вы хотите сопоставить числовые выражения присваивания в скрипте, как это:

x=1234 

где некоторые числа отрицательны и имеют знак минус:

x=-5678 

Вы можете использовать это:

grep -E "x=-?[0-9]+" * 

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

(Я не думаю, что простой grep поддерживает ?или +, следовательно -E).

Я понял это .. Большое спасибо .. И что значит egrep a? имя файла 'будет на самом деле .. Если вы можете выразить это словами .. 14 лет назад 0
@RB: `egrep a? filename` будет соответствовать каждой строке. Это не полезно само по себе. RichieHindle 14 лет назад 3
Обычный GNU grep (без -E) поддерживает `?`, Но вы должны избегать его. `эхо" цвет "| grep "colou \? r" `Должен вернуть` color`. Matt Kneiser 10 лет назад 2
4

Это поиск по одному символу, соответствующий одному или нулю символа перед ним.

Примечание: вам нужно сбежать? используя \ first: \ ?.

Почему отрицательный голос? : / 14 лет назад 0
Не мое отрицательное мнение, но я не думаю, что ваш ответ имеет какой-либо смысл. Ваше регулярное выражение `i-?`, Но вы говорите о сопоставлении `i + j`. И если вы хотели сказать «i +?», То это все равно будет соответствовать «i ++». `?` Не ограничивает то, что приходит * после * совпадения, поэтому `i +?` Будет счастливо совпадать с `i ++`. RichieHindle 14 лет назад 0
4
chaos

?в grepпринципе не является метасимволом, поэтому, если вы ищите a?, вы на самом деле ищите, за aкоторым следует знак вопроса.

Если бы вы использовали egrep(иначе grep -E), то ответы, указывающие на то, что ?это метасимвол регулярного выражения с нулем или единицей предыдущего объекта, будут правильными.

Да, сэр, вы правы ... но мое сомнение лежит здесь само по себе, это будет всегда верно, если предыдущий символ встречается 0 или 1 раз ... так что толку? тогда ,, мне нужно знать где это? полезно. В противном случае мы бы использовали * также для того же, так как он возвращает те же результаты. 14 лет назад 0
Да, `a?` Сам по себе бессмысленно искать, потому что он всегда будет совпадать. Это имеет смысл только как часть большего регулярного выражения. chaos 14 лет назад 2
Можете ли вы привести какой-либо пример такого выражения-выражения ... где я могу знать одно использование? .. 14 лет назад 0
Он имел в виду? = "" или "a". В этом случае все соответствует "". Вы ищете один или ноль символов одного символа, которые также соответствуют чему-либо. 14 лет назад 0
Я только что привел пример, чтобы эффективно передать мой вопрос. Но что мне нужно, так это фактическое использование «egrep?». Есть ли какой-либо reg-expr, откуда я мог бы найти фактическое использование этого .. 14 лет назад 0
Вы читали мой комментарий? Я дал тебе один 14 лет назад 0
Если вы хотите сопоставить `a` и` aa`, но не `aaa` или` aaaa` и т. Д., Вы захотите регулярное выражение `aa?`. chaos 14 лет назад 0
@chaos: Нет, это просто неправильно. `aa?` будет соответствовать `a`,` aa`, `aaa` и` aaaa`. `?` Не ограничивает то, что следует за этим. Пожалуйста, попробуйте эти вещи, прежде чем публиковать их. RichieHindle 14 лет назад 0
@RichieHindle: Хм, давайте посмотрим, могу ли я заявить об этом политическим образом. То, что вы не распознаете, - это разница между регулярным выражением, * соответствующим * последовательности, и возвращаемым положительным значением для строки, * содержащей * эту последовательность. Если `aa?` * Соответствует * `aaaa`, то` aa? B` будет соответствовать `aaaab`. chaos 14 лет назад 0
@chaos: Ах, хорошо, понял. Что бы это ни стоило, я не думаю, что ваш комментарий * Если вы хотите сопоставить `a` и` aa`, но не `aaa` или` aaaa` и т. Д., Вы бы хотели, чтобы регулярное выражение `aa?` * Давало это понять. RichieHindle 14 лет назад 0
@RichieHindle: Да, возможно, нет. Надеюсь, этот дополнительный комментарий прояснит это. chaos 14 лет назад 0
Я думаю, что канонический пример, который РБ искал, это «ab? C» будет соответствовать «ac» или «abc». Jonathan Hartley 12 лет назад 0
1
John Oxley

В регулярных выражениях говорите, а? означает 0 или 1 'a's. Так что если вы ищете строку, в которой есть 0 или 1, вы получите все. Место, где это было бы полезно, - это совпадение натуральных чисел:

/^\+?\d+$/ 

который играет как

^: beginning of line \+: + sign ?: 0 or 1 of previous character \d: digit +: one or more of previous character $: end of line 

и будет соответствовать как +123и456

Загляните на регулярные выражения для получения дополнительной информации об использовании регулярных выражений.

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