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