Вы можете использовать sed
или awk
или cut
, например:
s='UA399_GTTTCG_L002_R1_001.file.gz'
awk -F'_' '{print $1"_"$2"_"$3}' <<< "$s"
sed 's/^\([^_]*\(_[^_]*\)\{2\}\).*/\1/' <<< "$s"
cut -d_ -f1,2,3 <<< "$s"
См. онлайн-демонстрацию .В обоих случаях результат будет UA399_GTTTCG_L002
.
sed
Подробнее
^
- начало строки \([^_]*\(_[^_]*\)\{2\}\)
- соответствие группы захвата 1: [^_]*
- 0+ символов, отличных от _
\(_[^_]*\)\{2\}
- два последовательных вхождения (\{2\}
) из: _
- знак подчеркивания [^_]*
- 0+ символов, отличных от _
.*
- остаток строки.
Замена - это просто заполнитель, содержащий текст группы 1.
awk
details
-F'_'
разбивает запись на разделенные подчеркиванием поля print $1"_"$2"_"$3
печатает только первое, второе и третье поля и объединяет их с _
char.
cut
подробности
-d_
устанавливает разделитель поля на _
символ -f1,2,3
выбирает только указанный набор полей (он также может принимать диапазон полей, как в Kрешение энта ).