греп для буквено-цифрових струн будь-якої довжини з двокрапкою з кожного боку


14

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

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

Вам просто потрібно включити розширені можливості регулярного вибору grep, включивши -Eкомутатор.
slm

Відповіді:


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, якщо це невірно.
slm

0

Оскільки ніхто більше не згадував про це, ви також можете використовувати egrep, що, як я розумію, рівнозначне grep -E.

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

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