Replace slash in Bash

前端 未结 5 1809
迷失自我
迷失自我 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: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
    

提交回复
热议问题