Вам нужно регулярное выражение? Я знаю, что это немного дешевое решение, но регулярные выражения не являются решением для всего.
Например, с помощью манипуляции со строкой Bash:
foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot
Возвращает gtk2-2.24.22-2
.
Вы можете назвать это в файле так:
foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt
Регулярные выражения хорошо разбирают что-то с самого начала, а не сзади, поскольку они потребляют "жадный" тип слева направо. Это выполнимо, но вам нужно быть более многословным, чем то, что вы могли бы сделать в простом Bash.
Обратите внимание, что то, что выглядит как регулярное выражение в Bash (.*
), Не является "реальным" регулярным выражением. В настоящем регулярном выражении точка .
представляет все символы, а *
означает, что предыдущий символ (группа) повторяется 0 – n раз. В Bash, однако, точка .
означает фактическую точку, а *
- это подстановочный знак для всех символов.