Я предполагаю, что ваш шаблон останется прежним, это единственное sed
решение должно работать.
sed -n "s/^\([^_]*\)_[^:]*::\([^:]*\)::.*/\2\[\1\]/p" filename
Выход для примера ввода:
TRINITY_DN120587_c0_g1_i1[ID1]
Пояснение :Начните с начала строки, сопоставьте содержимое до первого знака подчеркивания [^_]*
и сохраните его в первой группе, затем сопоставьте вторую группу между первым и вторым двойным двоеточием [^:]*
. Замените эту строку и сопоставьте с желаемым выходным форматом, p напечатает измененную строку.