Replace one character with another in Bash

前端 未结 6 724
逝去的感伤
逝去的感伤 2020-11-28 18:38

I need to be able to do is replace a space () with a dot (.) in a string in bash.

I think this would be pretty simple, but I\'m new so I ca

相关标签:
6条回答
  • 2020-11-28 19:09

    Try this for paths:

    echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
    

    It replaces the space inside the double-quoted string with a + sing, then replaces the + sign with a backslash, then removes/replaces the double-quotes.

    I had to use this to replace the spaces in one of my paths in Cygwin.

    echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
    
    0 讨论(0)
  • 2020-11-28 19:11

    You could use tr, like this:

    tr " " .
    

    Example:

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

    From man tr:

    DESCRIPTION
         Translate, squeeze, and/or delete characters from standard input, writ‐ ing to standard output.

    0 讨论(0)
  • 2020-11-28 19:11

    Use parameter substitution:

    string=${string// /.}
    
    0 讨论(0)
  • 2020-11-28 19:13

    Try this

     echo "hello world" | sed 's/ /./g' 
    
    0 讨论(0)
  • 2020-11-28 19:26

    Use inline shell string replacement. Example:

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

    See http://tldp.org/LDP/abs/html/string-manipulation.html for more details.

    0 讨论(0)
  • 2020-11-28 19:34

    In bash, you can do pattern replacement in a string with the ${VARIABLE//PATTERN/REPLACEMENT} construct. Use just / and not // to replace only the first occurrence. The pattern is a wildcard pattern, like file globs.

    string='foo bar qux'
    one="${string/ /.}"     # sets one to 'foo.bar qux'
    all="${string// /.}"    # sets all to 'foo.bar.qux'
    
    0 讨论(0)
提交回复
热议问题