С 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
запускается снова, чтобы вернуть обратную строку в исходном порядке.