С KSH, как преобразовать "12345" в "1.2.3.4.5?"
С KSH, если у меня есть строка 12345 и я хочу, чтобы это было преобразовано в 1.2.3.4.5, Как мне это сделать?
Я пытался использовать cut но это не так просто.
echo "12345" | cut -c1
4 ответа
Обязательное awk ответ:
echo "12345" | awk '$1=$1' FS= OFS="."
Выход:
1.2.3.4.5
Ответ изменен из одного из решений в этом сообщении переполнения стека.
Perl regex (с поиском и обратными ссылками) отвечает, чтобы заменить все на "все плюс плюс точка", кроме последнего (при условии, что это был вопрос):
$ echo "12345" | perl -wlpe 's/(.(?=.))/$1\./g'
1.2.3.4.5
Решение sed протестировано с помощью ksh и /usr/bin/sed на OpenSolaris
echo "12345" | /usr/bin/sed -e 's/./&\./g' -e 's/\.$//'
Это должно работать. Проверено в bash а также ksh в Mac OS X:
echo "12345" | sed 's/\(.\{1\}\)/\1./g' | rev | cut -c 2- | rev
Выход:
1.2.3.4.5
И разбивка команды выглядит так:
-
echoочевидно. -
sedразбивает строку на символы и затем добавляет.между каждым персонажем. revпереворачивает строкуcutвырезает строку в зависимости от положения символа; это2из-за перевода строки я верю.revзапускается снова, чтобы вернуть обратную строку в исходном порядке.