Самый простой способ заменить белые пробелы (подчеркивание) _ в bash

Недавно мне пришлось написать немного script, которые анализировали виртуальные машины в XenServer, и поскольку имена виртуальных машин в основном состоят из белых пробелов, например, в Windows XP или Windows Server 2008, мне пришлось обрезать эти пробелы и заменить их на подчеркивания _. Я нашел простое решение для этого, используя sed, который является отличным инструментом, когда дело доходит до строковых манипуляций.

echo "This is just a test" | sed -e 's/ /_/g'

возвращает

This_is_just_a_test

Ответ 1

Вы можете сделать это, используя только оболочку, не нужно tr или sed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

Ответ 2

Это пограничное программирование, но посмотрите на tr:

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Должен это сделать. Первый вызов сжимает пространства вниз, второй заменяет знак подчеркивания. Вероятно, вам нужно добавить TAB и другие символы пробелов, это только для пробелов.