Удалить две точки в конце строки

Удалить две точки в конце строки

Мне нужно использовать регулярное выражение, чтобы удалить весь текст, начинающийся с конца строки и идущий на две точки назад.

gtk2-2.24.22-2.fc20.x86_64

становится

gtk2-2.24.22-2

Это вывод rpm -qaв текстовый файл, и мне нужно отрезать конец.

решение1

Тынуждатьсярегулярное выражение? Я знаю, что это немного дешевое решение, но регулярные выражения не являются решением для всего.

Например, при работе со строками 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 точка .означает настоящую точку, а *является подстановочным знаком для всех символов.

Связанный контент