grep для буквенно-цифровых строк любой длины с двоеточием на каждой стороне


14

Как вы будете использовать буквенно-цифровые строки от 1 до 50 символов (в идеале, любая длина будет работать тоже) с двоеточием с каждой стороны - типичным результатом будут все строки, содержащие строку :shopping:. Пока у меня есть код ниже (я пробовал несколько вариантов), который не работает:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

Вам просто нужно включить расширенные возможности регулярных выражений grepпутем включения -Eкоммутатора.
СЛМ

Ответы:


13

Вы должны включить расширенные регулярные выражения для этого:

grep -E ':[[:alnum:]]+:' ~/x.txt

4

С помощью основных регулярных выражений вы можете написать это так:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Обратите внимание, что \{(в отличие от \+или \?например) является стандартным и переносимым, и на самом деле эквиваленты BRE +и ?обычно пишутся с помощью \{: \{1,\}и \{0,1\}. grep -EОн также является стандартным и переносимым, так что вы можете использовать его так, как это делает для более удобочитаемых регулярных выражений в этих случаях.


1

Вы используете расширенное регулярное выражение, поэтому вам нужно использовать опцию -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

Благодарность! Я поставил другой ответ как правильный, потому что я не написал свой «идеальный» сценарий в заголовке, и я не хочу, чтобы люди, которые ищут ответ в Google, вставляли неправильный ответ, но я буду использовать ваш. :)

1
@TorThommesen - вы можете редактировать заголовок вашего Q, если он не правильный.
СЛМ

0

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

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrepбыла историческая команда, чтобы пообщаться с EREs. С тех пор функции grep и egrep (давно) были объединены в grep с опцией -E. egrepв настоящее время считается устаревшим / устаревшим (но вряд ли пойдет, так как некоторые люди все еще привыкли к нему).
Стефан Шазелас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.