#regex #shell #grep
Вопрос:
вот так: p.txt
abc-111-zzz-022-ffff
abc-222-zzz-033-ffff
abc-333-zzz-044-ffff
Я могу получить полное совпадение ( $0
в регулярном выражении):
[root@ser user]# grep -Po 'abc-([0-9] )-zzz-([0-9] )' p.txt
abc-111-zzz-022
abc-222-zzz-033
abc-333-zzz-044
Как я могу получить только содержимое подгрупп $1$2
, например :
111022
222033
333044
Спасибо!
Комментарии:
1. Я совершенно уверен, что вам нужно будет выполнить grep дважды, по одному разу для каждой группы захвата, используя lookahead и lookbehinds (или используйте что-то другое, кроме grep).
Ответ №1:
grep
не позволяет печатать группы захвата. Воспользуйся sed
:
sed -E 's/abc-([0-9] )-zzz-([0-9] ).*/12/' file
111022
222033
333044
В качестве альтернативы, если у вас есть pcregrep
, используйте эту команду для печати первых 2 групп захвата:
pcregrep -o1 -o2 'abc-([0-9] )-zzz-([0-9] )' file
111022
222033
333044