代码之家  ›  专栏  ›  技术社区  ›  Marta Koprivnik

bash:如何在字符串中添加空格?

  •  5
  • Marta Koprivnik  · 技术社区  · 10 年前

    我有一条这样的绳子:

    string="aaa-bbb"
    

    但我想在字符“-”之前添加空格,所以我想要这个:

    aaa -bbb
    

    我试了很多东西,但我不能在那里增加空间。我试过了 echo $string | tr '-' ' -' ,和其他一些东西,但它没有工作。。。

    我有Linux Mint:GNU bash,版本4.3.8(1)

    5 回复  |  直到 10 年前
        1
  •  10
  •   Jeff Bowman    10 年前

    不需要打电话 sed 使用 string substitution BASH本土:

    $ foo="abc-def-ghi"
    $ echo "${foo//-/ -}"
    abc -def -ghi
    

    请注意 两个斜杠 变量名后:第一个斜杠替换第一个出现的地方,其中两个斜杠替代每个出现的地方。

        2
  •  1
  •   Jay jargot    10 年前

    尝试一下:

    printf "%s\n" "${string}" | sed 's/-/ -/g'
    

    它在寻找 - 并替换为 - (空格连字符)

        3
  •  1
  •   Community Mohan Dere    9 年前

    您要求shell回显未引用的变量 $string .
    在这种情况下,变量内的空格用于分割字符串:

    $ string="a -b -c"
    $ printf '<%s>\n' $string
    <a>
    <-b>
    <-c>
    

    变量中确实包含空格,只是您没有正确看到它。 Quote your expansions

    $ printf '<%s>\n' "$string"
    <a -b -c>
    

    要从更改变量 - 到 - 有许多解决方案:

    标准偏差: string="$(echo "$string" | sed 's/-/ -/g')"; echo "$string"
    猛击: string="${string//-/ -}; echo "$string"

        4
  •  1
  •   webb    10 年前

    tr 一次只能替换一个字符。你要找的是 sed :

    echo "$string" | sed 's/-/ -/'

        5
  •  1
  •   Stephen Quan    10 年前

    Bash具有内置字符串替换。

    result="${string/-/ -}"
    echo "$result"
    

    或者,您可以使用 sed :

    result=$(echo "$string" | sed 's/-/ -/')
    echo "$result"
    
    推荐文章