Почти единственное, что гарантированно существует, — это сам корневой каталог. Существует множество стандартов, которые почти повсеместно соблюдаются, но скучающий системный инженер вполне может развернуть сборку Linux, в которой /etc
находится в /andsoforth
, /bin
живет в /cupboard
, /usr
живет в /luser
и так далее. В такой системе все ставки сняты.
Вы можете попробовать с помощью 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
Всякий раз, когда нужно что-то разузнать, я тянусь к grep
из ящика с инструментами.
$ grep -oP '\d+(?:\.\d+)+-\K[^-]+(?=-\d+)' file