-1

С KSH, если у меня есть строка 12345 и я хочу, чтобы она была преобразована в 1.2.3.4.5 , как я могу это сделать?

Я пытался использовать cut но это не так просто.

echo "12345" | cut -c1

4 ответа4

2

Обязательный awk ответ:

echo "12345" | awk '$1=$1' FS= OFS="."

Выход:

1.2.3.4.5

Ответ изменен одним из решений в этом сообщении переполнения стека .

1

Perl regex (с поиском и обратными ссылками) отвечает, чтобы заменить все на «все плюс плюс точка», кроме последнего (при условии, что это был вопрос):

$ echo "12345" | perl -wlpe 's/(.(?=.))/$1\./g'
1.2.3.4.5
0

Решение sed протестировано с помощью ksh и /usr /bin /sed на OpenSolaris

echo "12345" | /usr/bin/sed -e 's/./&\./g' -e 's/\.$//'
-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .