Как использовать sed или awk или что-то подобное, чтобы заменить каждое странное вхождение символа?

У меня есть следующая строка:

"1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55".

Как использовать awk или sed для получения

"1.0,2.0,3.0,4.0,5.0,6.0,13.05,24233.55"?

Я пытался использовать

sed 's/,/./g' <<< "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55"
1.0.2.0.3.0.4.0.5.0.6.0.13.05.24233.55 

а также

sed 's/,/./2' <<< "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55"
1,0.2,0,3,0,4,0,5,0,6,0,13,05,24233,55

Который заменил только второй предмет. Мне нужно, чтобы каждый странный случай менялся. В будущем, какой код будет заменять каждое нечетное вхождение, на. ?

Спасибо за вашу помощь

0
de
Ваш заголовок не совпадает с вопросом. Исправленный.
добавлено автор Wiktor Stribi?ew, источник
Вы можете использовать sed -E 's/([^,] *), ([^,] *) (, | $)/\ 1. \ 2 \ 3/g' <<< "1,0 , 2,0,3,0,4,0,5,0,6,0,13,05,24233,55" . Просмотрите эту демонстрацию .
добавлено автор Wiktor Stribi?ew, источник
Это отличается от связанного поста: sed 's /,/./ 2; P; D;' <<< «1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55» дал следующий результат: 1,0.2,0,3,0 , 4,0,5,0,6,0,13,05,24233,55
добавлено автор smurfit89, источник
попробуйте perl "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55" | perl -pe 's /,/++ $ x% 2 == 0? ",": "."/ge' 1.0,2.0,3.0,4.0,5.0,6.0,13.05,24233.55
добавлено автор stack0114106, источник

2 ответы

С любым sed, который поддерживает ERE через -E , например GNU sed и OSX/BSD sed:

$ echo "1,0,2,0,3,0,4,0,5,0,6,0,13,05,24233,55" | sed -E 's/([^,]+),([^,]+(,|$))/\1.\2/g'
1.0,2.0,3.0,4.0,5.0,6.0,13.05,24233.55
0
добавлено

попробуй это:

на конец:

sed 's/[,]$/?/' YourFile
  • помещая , между [] , вы можете удалить большую часть поведения регулярного выражения, принимая буквенное значение (не для некоторых символов, таких как ^ , которые нужно управлять другим способом
  • установка $ означает указание на конец строки

g в вашем тесте означает изменение каждый раз, вы только хотели 1 и в конце

для внутреннего:

sed -e 's/,/./1;p' \
    -e ':a' \
    -e 's/^\(\([^.]*[.][^,]*,\)*\)\([^,]*\),\([^,]*\)/\1\3.\4/
        /[^,]*,[^,.]*,/ ta' YourFile

вам нужна петля и специальный тест из-за существующего альтернанса

0
добавлено
Это не повлияет на размещенный образец ввода. Вам не нужно ставить запятую внутри выражения в скобках, так как оно уже буквально, это не метасимвол.
добавлено автор Ed Morton, источник
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru