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