用Bash中的句点替换空格

Bri*_*ica 211 string bash replace

我需要能够做的是用bash中的字符串中) with a dot (.)替换space().

我认为这很简单,但我是新手,所以我无法弄清楚如何修改这个用途的类似示例.

Bri*_*per 362

使用内联shell字符串替换.例:

foo="  "

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

# replace all blanks
bar=${foo// /.}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://tldp.org/LDP/abs/html/string-manipulation.html.

  • 虽然这个解决方案在处理短字符串(我猜是常见情况)时很好,但人们可能更喜欢使用“tr”来处理长字符串。在我的系统上,从包含超过 1000 个字符的字符串开始,“tr”的性能优于 bash。看来 bash 的时间复杂度比线性的还要差。一个小测试: `x="$(tr -dc 'az \n' </dev/urandom | head -c1M)"; 时间 y="$(tr ' ' \\- <<< "$x")"; 时间 z="${x// /-}"`。当字符串长度为 1M (=2^20) 时,`tr` 花费了 `0.04s`,bash 5.0.11 花费了 `17s`。对于 2M,“tr”需要“0.07s”(预期),但 bash 需要“69s”(长度是字符串长度的 4 倍)。 (3认同)

aio*_*obe 72

你可以使用tr,像这样:

tr " " .
Run Code Online (Sandbox Code Playgroud)

例:

# echo "hello world" | tr " " .
hello.world
Run Code Online (Sandbox Code Playgroud)

来自man tr:

描述
     从标准输入翻译,挤压和/或删除字符,写入标准输出.

  • 另一方面,它适用于 2gb 文件,而无需将整个文件加载到内存中。 (6认同)
  • 这还有另一个优点,我们不需要定义变量并且可以轻松地在 bash 命令中使用它。 (3认同)

Gil*_*il' 49

在bash中,您可以使用构造在字符串中进行模式替换${VARIABLE//PATTERN/REPLACEMENT}.使用just /而不是//仅替换第一次出现.该模式是一个通配符模式,如文件globs.

string='foo bar qux'
one="${string/ /.}"     # sets one to 'foo.bar qux'
all="${string// /.}"    # sets all to 'foo.bar.qux'
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 23

试试这个

 echo "hello world" | sed 's/ /./g' 
Run Code Online (Sandbox Code Playgroud)


小智 8

尝试这个路径:

echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
Run Code Online (Sandbox Code Playgroud)

它用单引号替换双引号字符串内的空格+,然后+用反斜杠替换符号,然后删除/替换双引号。

我必须使用它来替换 Cygwin 中路径之一中的空格。

echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
Run Code Online (Sandbox Code Playgroud)

  • 已经有一个两年前的答案可以解决“sed”的问题。引号是无关紧要的。 (2认同)

Fri*_*ner 5

使用参数替换:

string=${string// /.}
Run Code Online (Sandbox Code Playgroud)