xml 속성 값을 대체하려면 쉘 스크립트를 사용해야 합니다.

xml 속성 값을 대체하려면 쉘 스크립트를 사용해야 합니다.

샘플 input.xml파일

<user dn="CN=company,DN=Department">
<role name="ROLE_ADMIN"/>
</user>

출력은

<user dn="String_1,String_2">
<role name="ROLE_ADMIN"/>
</user>

위의 문제 설명에 관한 제안 사항을 알려주십시오. 참고: 값이 비어 있을 수도 있으므로 dn을 하드코딩해서는 안 됩니다. 예를 들어 dn=""

답변1

XML 로 작업하는 대신 sed다음과 같은 XML 인식 도구를 사용하십시오 xmlstarlet.

xmlstarlet ed -u '/user/@dn' -v 'String1, String2' input.xml

답변2

명령줄 XML 파서/편집기 사용XML 스타:

$ company="The Company"
$ department="The Department"

$ dn="CN=$company,DN=$department"

$ xml ed -t -u '/user/@dn' -v "$dn" input.xml
<?xml version="1.0"?>
<user dn="CN=The Company,DN=The Department">
  <role name="ROLE_ADMIN"/>
</user>

dn이 명령은 루트 노드의 속성을 찾아 user해당 값을 $dn확장된 값으로 편집합니다.

나중에 속성을 더 쉽게 구문 분석할 수 있도록 속성 값에서 회사 이름과 다음 항목 사이에 더 눈에 띄는 구분 기호를 사용하는 dn것이 좋습니다 . DN;를 들어 ,. 또는 user노드 에 별도의 속성으로 추가합니다 .

답변3

라인이 항상 독립적 이라면 <user...>이는 sed의 간단한 표현입니다.

sed "s/^<user .*/<user dn=\"$string1,$string2\">/" input.xml

이제 이렇게 작성하면 $string1$string2둘 다 변수가 됩니다.

예를 들면 다음과 같습니다.

$ string1="hello"
$ string2="there"
$ sed "s/^<user .*/<user dn=\"$string1,$string2\">/" input.xml
<user dn="hello,there">
<role name="ROLE_ADMIN"/>
</user>

sed -i를 재정의하는 "내부" 대체를 사용할 수 있습니다 input.xml.

답변4

sed당신의 친구입니다

 sed '/^<user dn=/s/CN=[^,]*,DN=[^"]*\"/String_1,String2/' filename

그것은 이루어져야합니다. String_1실시간으로 &를 선택하려면 변수를 사용하여 이를 달성할 수 있습니다. String_2나는 대본을 쓸 것이다

#!/bin/bash
read -p"Enter string1" str1
read -p"Enter string2" str2
sed -i "/^<user dn=/s/CN=[^,]*,DN=[^\"]*\"/$str1,$str2/" /path/to/input.xml

-i옵션은 파일을 즉시 수정합니다.


노트

큰따옴표는 bash 변수 확장을 허용하기 때문에 sed 스크립트에서 사용됩니다. 그러나 같은 이유로 패턴 자체에서 큰따옴표를 이스케이프했습니다.


관련 정보