2016-07-21 2 views
0

У меня есть следующая строка libVersion = '1.23.45.6', и мне нужно заменить 1.23.45.6 на 1.23.45.7.Bash - Найти и заменить регулярное выражение другой строкой

Очевидно, что версия может быть любым числом с аналогичным форматом (это не должно быть 4 цифры).

Я пытался использовать следующее, но не работает

echo "libVersion = '1.23.45.6'" |sed "s/([0-9\.]+)/1.23.45.7/g"

+1

'echo 'libVersion =' 1.23.45.6 '" | sed "s/[0-9.] \ +/1.23.45.7/g" ' –

+1

или' echo "libVersion =' 1.23.45.6 '" | sed "s/'[^'] * '/' 1.23.45.7 '/ g" ' –

+0

Бинго !!! Пожалуйста, поместите его в ответ, чтобы я мог отметить правильный ответ. – Wins

ответ

1

Basic SED, т.е. патч в без каких-либо аргументов использует BRE (Basic Regular Expression). В BRE, вы должны бежать +, чтобы довести мощность регулярных выражений + который повторяет предыдущий маркер один или несколько раз, также для захвата групп \(regex\)

echo "libVersion = '1.23.45.6'" | sed "s/[0-9.]\+/1.23.45.7/" 

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

echo "libVersion = '1.23.45.6'" | sed "s/'[^']*'/'1.23.45.7'/" 

Поскольку замена должна происходить только один раз, вам не нужен g глобальный модификатор.

+1

@wiktor вы издеваетесь надо мной: P –

Смежные вопросы