次の2つの文字列を変数として保存します。
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";)'
シェルスクリプトを使用するスクリプトでは、「str1」を「str2」に置き換えたいと思います。誰でも私を助けることができますか?努力していますがsed
できません。
次のコマンドを試してみました。
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" ; \) ) _\12.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319\2_' 2.xml
エラーは発生しませんが、予想される出力は生成されません。 「2.xml」のファイル内容はスキーマにすぎません。
ベストアンサー1
sed
このコマンドで何をしたいのかは本当にわかりません。特定のグループをキャプチャしようとしましたが、使用していないようです。とにかくあなたが望むのはこれです。
sed -i "s#$str1#$str2#" file
または文字列を変数として保存しない場合:
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
あるいは、唯一の違いはstr1が含まれていないようです|| 1.2.840.113556.1.4.319
。
sed -i 's/")/ || 1.2.840.113556.1.4.319 ")/' file