쉘 스크립팅 및 자동화 작업을하고 있습니다. 더 많은 코드를 작성하지 않고도 cetain 작업을 수행하고 싶습니다.sed를 사용하여 파일에서 n 어커런스를 바꾸는 방법은 무엇입니까?
아래는 웹 서비스의 샘플 xml입니다. 요청 (Data.xml) 아래의 각 세그먼트에서 시작일이 바뀌기를 원합니다.
첫 번째 호출에서 첫 번째 태그의 시작 날짜 만 수정되고 나머지 시작 날짜는 변경되지 않습니다.
내 접근 방식은 모든 줄 바꿈을 제거하고 한 줄로 전체 XML을 형성 한 다음 sed를 사용하여 원하는 발생을 대체했습니다.
<Data>
<First>
<Name>Micheal</Name>
<Account-Validation>
<startdate>01011970</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</First>
<Second>
<Name>Adam</Name>
<Account-Validation>
<startdate>01011979</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</Second>
<Third>
<Name>Raul</Name>
<Account-Validation>
<startdate>01011970</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</Third>
</Data>
제가 그것이 전체 XML 포맷을 변경하는 것을 볼 수있는 유일한 문제 :
제가 명령 아래cat Data.xml | awk '{ print $1}'| xargs echo | sed 's/<startdate>01011970<\/startdate>/<startdate>01011979<\/startdate>/2' | sed 's/> </>\n</g'
출력을 이용하여 시험해 보았다. 그래서 내가 보류 버퍼 및 패턴 버퍼 접근 방식을 사용하여 동일한 찾고 있어요. 여기,
cat Data.xml | sed '{/<Second>/,/<\/Second>/g;s/<startdate>01011970<\/startdate>/<startdate>01011979<\/startdate>/p};h;
샘플 명령입니다하지만 위의 방법으로 문제가 해결되지 않기 때문에 어떤 일이 사용 보류 버퍼와 패턴 버퍼 접근을하는 데 도움이 있습니다. 이 접근 방식을 사용하는 이점은 발생 횟수를 세지 않아도되므로 시작할 날짜의 태그 이름 만 쉽게 바꿀 수 있습니다.
인 data.xml
<Data>
<First>
<Name>Micheal</Name>
<Account-Validation>
<startdate>01011970</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</First>
<Second>
<Name>Adam</Name>
<Account-Validation>
<startdate>01011970</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</Second>
<Third>
<Name>Raul</Name>
<Account-Validation>
<startdate>01011970</startdate>
<enddate>01019999</enddate>
</Account-Validation>
</Third>
</Data>
감사합니다, Priyank 샤
XML 데이터를 수정하는 데 XSLT를 사용하는 것이 좋습니다. 문자열 바꾸기를 사용하면 종종 복잡한 패턴이 생겨 항상 작동하지 않을 수 있습니다. – beny23