Как удалить после второго периода в строке, используя sed - PullRequest
0 голосов
/ 22 сентября 2018

В моем скрипте возможный номер версии: 15.03.2 установлен в переменную $STRING.Эти цифры всегда меняются.Я хочу сократить его до: 15.03 (или как там будет в следующий раз).

Как мне удалить все после второй ., используя sed?

Что-токак:

$(echo "$STRING" | sed "s/\.^$\.//")

(я не знаю, что делают ^, $ и другие, но они выглядят связанными, так что я только догадался.)

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Я думаю, что лучший инструмент здесь вырезан

echo '15.03.2' | cut -d . -f -2
0 голосов
/ 22 сентября 2018

Это может сработать для вас (GNU sed):

sed 's/\.[^.]*//2g' file

Удалить второе или большее вхождение периода, за которым следует ноль или непериодный символ (ы).

0 голосов
/ 22 сентября 2018
$ echo '15.03.2' | sed 's/\([^.]*\.[^.]*\)\..*/\1/'
15.03

В общем случае пропустить N периодов:

$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){2}[^.]*)\..*/\1/'
15.03.2
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){3}[^.]*)\..*/\1/'
15.03.2.3
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){4}[^.]*)\..*/\1/'
15.03.2.3.4
...