Replace slash in Bash

前端 未结 5 1781
迷失自我
迷失自我 2020-12-28 12:54

Let\'s suppose I have this variable:

DATE=\"04/Jun/2014:15:54:26\".

Therein I need to replace / with \\/ in order to

相关标签:
5条回答
  • 2020-12-28 13:21

    here you go:

    kent$  echo "04/Jun/2014:15:54:26"|sed 's#/#\\/#g'  
    04\/Jun\/2014:15:54:26
    

    your tr line was not correct, you may mis-understand what tr does, tr 'abc' 'xyz' will change a->x, b->y, c->z,not changing whole abc->xyz..

    0 讨论(0)
  • 2020-12-28 13:23

    This has not been said in other answers so I thought I'd add some clarifications:

    tr uses two sets of characters for replacement, and the characters from the first set are replaced with those from the second set in a one-to-one correspondance. The manpage states that

    SET2 is extended to length of SET1 by repeating its last character as necessary. Excess characters of SET2 are ignored.

    Example:

    echo abca | tr ab de    # produces decd
    echo abca | tr a de     # produces dbcd, 'e' is ignored
    echo abca | tr ab d     # produces ddcd, 'd' is interpreted as a replacement for 'b' too
    

    When using sed for substitutions, you can use another character than '/' for the delimiter, which will make your expression clearer (I like to use ':', @n34_panda proposed '#' in their answer). Don't forget to use the /g modifier to replace all occurences: sed 's:/:\\/:g' with quotes or sed s:/:\\\\/:g without (backslashes have to be escaped twice).

    Finally your shortest solution will probably be @Luc-Olivier's answer, involving substitution, in the following form (don't forget to escape forward slashes too when part of the expected pattern):

    echo ${variable/expected/replacement}     # will replace one occurrence
    echo ${variable//expected/replacement}    # will replace all occurrences
    
    0 讨论(0)
  • 2020-12-28 13:27

    Use sed for substitutions:

    sed 's#/#\\/#g' < filename.txt > newfilename.txt
    

    You usually use "/" instead of the "#", but as long as it is there, it doesn't matter.

    I am writing this on a windows PC so I hope it is right, you may have to escape the slashes with another slash.

    sed explained, the -e lets you edit the file in place. You can use -i to create a backup automatically.

    sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
    
    0 讨论(0)
  • 2020-12-28 13:30

    No need to use an echo + a pipe + sed.

    A simple substitution variable is enough and faster:

    echo ${DATE//\//\\/}
    
    #> 04\/Jun\/2014:15:54:26
    
    0 讨论(0)
  • 2020-12-28 13:30

    You can also escape the slashes, with a slightly less readable solution than with hashes:

    echo "04/Jun/2014:15:54:26" | sed 's/\//\\\//g'

    0 讨论(0)
提交回复
热议问题