Как напечатать текст между двумя шаблонами с подстановочными знаками?

Почти единственное, что гарантированно существует, — это сам корневой каталог. Существует множество стандартов, которые почти повсеместно соблюдаются, но скучающий системный инженер вполне может развернуть сборку Linux, в которой /etcнаходится в /andsoforth, /binживет в /cupboard, /usrживет в /luserи так далее. В такой системе все ставки сняты.

-1
07.01.2020, 21:06
2 ответа

Вы можете попробовать с помощью awkиспользовать -для разделения токенов:

awk -F\- '{print $4}' input_file

Если вы хотите применить другие фильтры, это один из возможных способов.:

<exec some filter based on other fields> input_file|awk -F\- '{print $4}'

Согласно вашему отредактированному ответу, и если вы ожидаете, что строка будет начинаться с ab-cd, сценарий будет

awk -F\- '$1=="ab" && $2=="cd" {print $4}' input_file

Исходя из последних требований, это скрипт:

awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' input_file

Мой тест с файлом:

cat qq
ab-cd-1.1.1.11-CAPTURE-11111111.xyz
ab-cd-1.1.1.11-CAPTURa-1111111a.xyz
ab-cd-1.1.1.11-CAPTURb-1111111.xyz
ab-cd-1.1.1.11-aAPTURE-a1111112.xyz


awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' qq
CAPTURE
0
28.01.2020, 05:11

Всякий раз, когда нужно что-то разузнать, я тянусь к grepиз ящика с инструментами.

$ grep -oP '\d+(?:\.\d+)+-\K[^-]+(?=-\d+)' file
0
28.01.2020, 05:11

Теги

Похожие вопросы