Вам не нужны регулярные выражения вообще (эти сложные вещи болят мне глаза!), Если вы используете Awk и немного креативны.
1. echo $example| awk -v ins="Good.long" -F . '{OFS="."; $NF = ins"."$NF;print}'
Что это делает:
-v ins = "Good.long" говорит awk создать переменную с именем 'ins' с "Good.long" в качестве содержимого,
-F. говорит awk использовать точку в качестве разделителя для ваших полей для ввода,
-OFS говорит awk использовать точку в качестве разделителя для ваших полей в качестве вывода,
NF - количество полей, поэтому $ NF - последнее поле,
часть $ NF = ... заменяет последнее поле, добавляет текущую последнюю строку к тому, что вы хотите вставить (переменная с именем «ins», объявленная ранее).
2. echo $example| awk -F . '{print $NF}'
$ NF - последнее поле, вот и все!
3. echo $example| awk -F . '{OFS="_"; $(NF-1) = $(NF-1)"."$NF; NF=NF-1; print}'
Здесь мы должны проявлять креативность, так как Awk AFAIK не позволяет удалять поля. Конечно, мы устанавливаем разделитель поля вывода на подчеркивание.
$ (NF-1) = $ (NF-1) "." $ NF: сначала мы заменяем второе последнее поле последним, приклеенным ко второму последнему, с точкой между.
Затем мы дурачим awk, чтобы заставить его думать, что Количество полей равно количеству полей минус одно, следовательно, удаляя последнее поле!
Обратите внимание, что вы не можете сказать $ NF = "", потому что тогда будет отображаться два подчеркивания.