Comando sed com padrão complexo e substituição

0

Eu tenho as duas sequências a seguir salvas como variáveis:

str1='ds-cfg-global-aci: (targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31") (version 3.0; acl "Anonymous control access"; allow(read) userdn="ldap:///anyone";)'

str2='ds-cfg-global-aci: (targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319 ") (version 3.0; acl "Anonymous control access"; allow(read) userdn="ldap:///anyone";)'

Eu quero substituir 'str1' por 'str2' em um script usando scripts de shell. Alguém por favor pode me ajudar? Estou tentando com sed , mas não consigo fazer isso.

Eu tentei usar o seguinte comando:

sed -i 's_ ( ds-cfg-global-aci: \(targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || )2.16.840.1.113894.1.8.31( "\) \(version 3.0 ; acl "Anonymous control access" ; allow\(read\) userdn="ldap:///anyone" ; \) ) _.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319_' 2.xml

Ele não gera nenhum erro, mas não produz a saída esperada. O conteúdo do arquivo '2.xml' é apenas o padrão.

    
por Sandeep Suthari 07.09.2015 / 16:01

1 resposta

1

Eu realmente não entendo o que você está tentando fazer com o comando sed . Você parece estar tentando capturar alguns grupos, mas não os usa. Enfim, o que você quer é algo como:

sed -i "s#$str1#$str2#" file

Ou, se você não tiver as strings salvas como variáveis:

sed -i 's#ds-cfg-global-aci: (targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31") (version 3.0; acl "Anonymous control access"; allow(read) userdn="ldap:///anyone";)#ds-cfg-global-aci: (targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319 ") (version 3.0; acl "Anonymous control access"; allow(read) userdn="ldap:///anyone";)#' file

Ou, como a única diferença parece ser que str1 não contém || 1.2.840.113556.1.4.319 , apenas adicione isso:

sed -i 's/")/ || 1.2.840.113556.1.4.319 ")/' file
    
por 07.09.2015 / 16:14