Заменить пробел точкой в ​​Bash - PullRequest
202 голосов
/ 08 мая 2011

Мне нужно уметь заменить пробел () на точку (.) в строке в bash.

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

Ответы [ 6 ]

346 голосов
/ 08 мая 2011

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

foo="  "

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

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

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

69 голосов
/ 08 мая 2011

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

tr " " .

Пример:

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

С man tr:

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

47 голосов
/ 08 мая 2011

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

string='foo bar qux'
one="${string/ /.}"     # sets one to 'foo.bar qux'
all="${string// /.}"    # sets all to 'foo.bar.qux'
20 голосов
/ 08 мая 2011

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

 echo "hello world" | sed 's/ /./g' 
5 голосов
/ 08 мая 2011

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

string=${string// /.}
2 голосов
/ 22 мая 2013

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

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...