-5

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

gtk2-2.24.22-2.fc20.x86_64

становится

gtk2-2.24.22-2

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

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .