다음 두 문자열을 변수로 저장합니다.
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