2015-06-11 3 views
2

Например, у меня есть этот sample.txt со следующей строкой:файла разбора с Bash

EX1 ~ 00 ~ 00 ~ 00 ~ 00 ~ 00 ~ Привет ~ 122113 ~ 00 ~ EX2 ~ Этот ~ Is ~ A ~ Пример ~ Data ~ EX1 ~ 00 ~ 00 ~ 00 ~ 00 ~ 00 ~ Привет ~ 123456 ~ 00

Я хочу, чтобы получить "Hello" и "Привет", оба после EX1 ~ 00 ~ 00 ~ 00 ~ 00 ~ 00 ~ У меня уже есть эта строка в моем сценарии bash, но я нашел слишком долго:

grep -oP 'EX1.[\w\s\d]*.[\w\s\d]*.[\w\s\d]*.[\w\s\d]*.[\w\s\d]*.\K[\w\s\d]*' < sample.txt 

У вас есть предложения по улучшению моего сценария? Спасибо

ответ

0

В вашем методе вы пишете то же самое [\w\s\d]* пять раз вместо этого вы устанавливаете квантификатор, который соответствует, если он ровно пять раз. Также использование \w\d такое же, как \w, так как соответствует любому символу слова [a-zA-Z0-9_] письмо \d или [0-9] не требуется снова.

Попробуйте изменить регулярное выражение:

EX1(?:.[\w\s]*){5}.(\K[\w\s]*) 

Working: https://regex101.com/r/rF3zN0/1

+0

OK2 я попробую это. благодаря – User122113

Смежные вопросы