我需要能够做的是用bash中的字符串中的点()替换空格(
.
)。
我认为这很简单,但我是新手,所以我无法弄清楚如何修改这个用途的类似例子。
答案 0 :(得分:339)
使用内联shell字符串替换。例如:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
有关详细信息,请参阅http://tldp.org/LDP/abs/html/string-manipulation.html。
答案 1 :(得分:68)
您可以使用tr
,如下所示:
tr " " .
示例:
# echo "hello world" | tr " " .
hello.world
来自man tr
:
<强>描述强>
翻译,挤压和/或删除标准输入中的字符,写入 标准输出。
答案 2 :(得分:46)
在bash中,您可以使用${VARIABLE//PATTERN/REPLACEMENT}
构造在字符串中执行pattern replacement。仅使用/
而非//
仅替换第一次出现。该模式是一个通配符模式,如文件globs。
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
答案 3 :(得分:20)
试试这个
echo "hello world" | sed 's/ /./g'
答案 4 :(得分:5)
使用参数替换:
string=${string// /.}
答案 5 :(得分:2)
尝试使用路径:
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
它用+
单词替换双引号字符串中的空格,然后用反斜杠替换+
符号,然后删除/替换双引号。
我必须使用它来替换Cygwin中我的一条路径中的空格。
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
答案 6 :(得分:0)
shellcheck 推荐的解决方案如下:
string="Hello World" ; echo "${string// /.}"
output: Hello.World