2015-04-04 7 views
-4

Я ищу серийный номер. Можно ли найти его с помощью grep?Как найти строку типа **** - ****** - ****** - **** используя grep?

+0

Что такое контекст? Вы пытаетесь найти эти строки в файлах? Вы работаете с bash или обрабатываете файлы с помощью языка программирования? 'grep' и регулярное выражение: например. см. здесь: [http://www.robelle.com/smugbook/regexpr.html](http://www.robelle.com/smugbook/regexpr.html) –

+0

Пожалуйста, взгляните на [Как создать минимальный, Полный и проверенный пример] (http://stackoverflow.com/help/mcve). – Cyrus

ответ

1

В обычном выражении . означает «любой символ здесь» и вне класса символов ([...]), - не имеет особого значения. Таким образом:

....-......-......-.... 

... будет выражением, которое вы ищете.

1

С GNU Grep:

echo "foo-bar abcd-abcdef-abcdef-abcd foo bar" | grep -oE '.{4}-.{6}-.{6}-.{4}' 

Выход:

 
abcd-abcdef-abcdef-abcd 
0

Серийные номера имеют только алфавит и numericals .. нет специальных символов, новые линии и т.д ..

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

\w{4}-\w{6}-\w{6}-\w{4} 
0

Предполагая, что серийный номер цифры AZ и 0-9 это правильное регулярное выражение для серийного номера АВС1-A1B2C3-A3B2C1-123A:

[A-Z0-9]{4}-[A-Z0-9]{6}-[A-Z0-9]{6}-[A-Z0-9]{4} 

AZ означает любой символ капитала от А до Z

0-9 любое число от 0 до 9

{4} означает 4-х символов

Если, например, ваш серийный номер выглядит следующим образом:

1234-ABCDEF-ABCDEF-1234 

Тогда ваше регулярное выражение должно быть так:

[0-9]{4}-[A-Z]{6}-[A-Z]{6}-[0-9]{4} 

Вы должны попробовать использовать www.regex101.com для построения вашего регулярного выражения