sed error: “invalid reference \1 on `s' command's RHS”

后端 未结 4 552
一整个雨季
一整个雨季 2020-12-04 20:38

I run several substitution commands as the core of a colorize script for maven. One of the sed commands uses a regular expression which works find in the shell

相关标签:
4条回答
  • 2020-12-04 21:08

    You need escape the / after the .

    sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g"
    

    Or if you don't want to worry about escaping, use |

    sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g"
    

    EDIT:

    sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"
    
    0 讨论(0)
  • 2020-12-04 21:12

    If the -r/--regexp-extended option is not provided, then the capturing parentheses must be escaped.

    0 讨论(0)
  • 2020-12-04 21:16

    This error is common for parentheses that are not escaped. Escape them and try again.


    For example:

    /^$/b
    :loop
    $!{
    N
    /\n$/!b loop
    }
    s/\n(.)/\1/g
    

    Should be escaped with backslashes before each parenthesis:

    /^$/b
    :loop
    $!{
    N
    /\n$/!b loop
    }
    s/\n\(.\)/\1/g
    
    0 讨论(0)
  • 2020-12-04 21:17

    Don't you need to actually capture for that to work? i.e. for variant #2:

    -r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
    

    (Note: untested)

    Without the -r argument back-references (like \1) won't work.

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