#bash #shell #awk #sed
#bash #оболочка #awk #sed
Вопрос:
Я хочу изменить свою переменную a, добавив
между любой цифрой и точкой непосредственно перед ней, пока мне удалось добавить только
после первой цифры и первой точки.
Мой скрипт:
branch="3.2.5"
firstbranch=$(echo $branch | sed -r 's/([0-9] .)(.)/1\2/g') amp;amp; echo $firstbranch
вывод, который он генерирует:
3.2.5
и желаемый результат:
3.2.5
Комментарии:
1. Косая черта вперед или назад?
2. попробуйте
sed -E 's/([0-9])./1.\/g' <<< "$branch"
3. Вы написали добавление между любой цифрой и точкой , но в желаемом выводе вы поставили между любой точкой и цифрой, т. Е. в другом порядке.
4. исправлено, извините за путаницу
Ответ №1:
Вы можете использовать:
sed 's/[0-9]./amp;\/g' <<< "$branch"
3.2.5
Ответ №2:
В случае, если вы согласны awk
, не могли бы вы попробовать следующие, написанные и протестированные с показанными примерами в ссылке https://ideone.com/T1suTg
echo "$branch" | awk 'BEGIN{FS=".";OFS=".\"} {$1=$1} 1'
Объяснение: печать branch
значения переменной оболочки echo
и отправка его вывода в качестве стандартного ввода в awk
команду. В awk
программе в BEGIN
блоке настройка разделителя полей as .
и настройка разделителя выходных полей as, .\
который на самом деле .
затем в основной программе переустанавливает 1-е поле на себя, чтобы применить новое значение разделителя выходных полей get. 1
выведет значение текущей строки.
Ответ №3:
Кроме того, можно использовать выражение POSIX BRE с sed
для вставки
между точкой и цифрой:
branch="3.2.5"
firstbranch=$(echo $branch | sed 's/(.)([[:digit:]])/1\2/g') amp;amp; echo $firstbranch
Результат: 3.2.5
Смотрите Онлайн-доказательство.
Объяснение регулярных выражений
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
. '.'
--------------------------------------------------------------------------------
) end of 1
--------------------------------------------------------------------------------
( group and capture to 2:
--------------------------------------------------------------------------------
[[:digit:]] any character of: digits (like d)
--------------------------------------------------------------------------------
) end of 2
Ответ №4:
Переменное расширение
branch="3.2.5"
echo ${branch//./.\}
3.2.5
Комментарии:
1. простое и короткое решение среди всех предложенных