複雑なパターンと置換を含むSedコマンド

複雑なパターンと置換を含むSedコマンド

次の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

おすすめ記事