У меня много файлов, строки которых выглядят так:
lotsofblah/XY##_####_morefoo
где # - это число. Теперь я хочу показать только части
YZ##_####
в bash, каждый в новой строке, конечно.
решение1
Предположим, вы хотите, чтобы XY состоял из любых двух букв...
Что-то вроде
grep -Eo "[A-Z]{2}[0-9]{2}_[0-9]{4}" file
Будет соответствовать [двум буквам][двум цифрам]_[четырем цифрам]
Если хотите, можно было бы написать немного точнее, убедившись, что в начале стоит /, а после — _, но это отправная точка.
Соберите это из man grep:
-E, --extended-regexp Interpret PATTERN as an extended regular expression (see below) -o, --only-matching Show only the part of a matching line that matches PATTERN.
решение2
Я предполагаю, что XY и YZ — это одно и то же, и я буду относиться к ним просто как к XY.
egrep "XY[0-9]{2}_[0-9]{4}" filename -o
Ключевым является -o
параметр, который показывает только совпадающий текст.