Search code examples
regexshellunixsedcygwin

use sed replace ""string"\1\"787" to "string"\1\"787" in cygwin


I am trying to search string and replace string in a file. I used the below code:

sed -e 's/{"AP_SESSION_ID"\1\"787"}/{"AP_SESSION_ID"\1\"800"}/g' FILE|tee FILE

but it is not working and the output is like this:

sed: number in \[0-9] invalid

My environment is CYGWIN.

sample file is:

DP_SESSION_ID is a sting for values DP_SESSION_ID is aplicat "DP_S42SETTACC_TYPE"\1\"02" "DP_SAP_CLIENT"\1\"460" "DP_SAP_COMM_CONNECTION"\1\"JAVA_COMM_TOOL_ANALYZER" "DP_SAP_CONNECTION"\1\"JAVA_TOOL_ANALYZER" "DP_SAP_TOOLBI_CONNECTION"\1\"JAVA_TOOLBI_ANALYZER" "DP_SESSION_ID"\1\"808"

I want search this "DP_SESSION_ID"\1\" sting and replace corresponding number like 808 in file prenatally(windows env), and i wand sing line command in windows bat command or perl command i don't want scrip or program

even i have installed cygwin tool in my server so unix also ok but single line command

server: windows 2008,cygwin x

using tool : datastage server jobs

perl -pi -e 's{" "DP_SESSION_ID"\1\"808 '"}{' "DP_SESSION_ID"\1\"900 '"'"}g' " file name this code is not working

Please give good solution


Solution

  • You need to "escape" the backslashes by using two in a row:

    sed -e 's/{"AP_SESSION_ID"\\1\\"787"}/{"AP_SESSION_ID"\\1\\"800"}/g' FILE|tee FILE
    

    Otherwise the \1 is treated as a backreference, and you have no subgroups (parenthesized expressions) to reference.