Answers:
使用内联外壳字符串替换。例:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
有关更多详细信息,请参见http://tldp.org/LDP/abs/html/string-manipulation.html。
tr
!...取决于可用的内存和硬件资源...但是您是对的!:根据要执行的工作,专用工具可以保持更高的效率!
$'\n'
您可以这样使用tr
:
tr " " .
例:
# echo "hello world" | tr " " .
hello.world
来自man tr
:
描述
翻译,压缩和/或删除标准输入中的字符,写到标准输出。
在bash中,您可以使用该构造在字符串中进行模式替换${VARIABLE//PATTERN/REPLACEMENT}
。使用just /
而不是//
只替换第一个匹配项。该模式是通配符模式,例如文件全局。
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
tr
对于长字符串可能更喜欢。在我的系统上,tr
bash的性能优于以多个1000
字符开头的字符串。好像bash的时间复杂度比线性差。一个小测试:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"
。用1M的字符串长度(= 2 ^ 20)tr
采取了0.04s
和bash 5.0.11了17s
。2Mtr
占用了0.07s
(预期),但bash占用了69s
(四倍于字符串长度的两倍)。