Замените пробел на период в Bash

Все, что мне нужно сделать, это заменить пробел () точкой (.) в строке в bash. Я думаю, что это будет довольно просто, но я новичок, поэтому не могу понять, как изменить аналогичный пример для этого использования.

Ответ 1

Использовать замену строки внутри строки. Пример:

foo="  "

# replace first blank only
bar=${foo/ /.}

# replace all blanks
bar=${foo// /.}

Подробнее см. http://tldp.org/LDP/abs/html/string-manipulation.html.

Ответ 2

Вы можете использовать tr, например:

tr " " .

Пример:

# echo "hello world" | tr " " .
hello.world

От man tr:

ОПИСАНИЕ
    Перевести, сжать и/или удалить символы из стандартного ввода,        до стандартного вывода.

Ответ 3

В bash вы можете сделать замену шаблонов в строке с конструкцией ${VARIABLE//PATTERN/REPLACEMENT}. Используйте только /, а не //, чтобы заменить только первое вхождение. Шаблон - шаблон подстановочного знака, например файловые глобусы.

string='foo bar qux'
one="${string/ /.}"     # sets one to 'foo.bar qux'
all="${string// /.}"    # sets all to 'foo.bar.qux'

Ответ 4

Попробуйте это

 echo "hello world" | sed 's/ /./g' 

Ответ 5

Используйте замену параметров:

string=${string// /.}

Ответ 6

Попробуйте это для путей:

echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'

Он заменяет пространство внутри строки с двумя кавычками + sing, затем заменяет знак + обратным слэшем, а затем удаляет/заменяет двойные кавычки.

Мне пришлось использовать это, чтобы заменить пробелы на одном из моих путей в Cygwin.

echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'