
RHEL에서는 다음을 활용할 수 있었습니다.sed-i파일의 문자열을 바꾸는 명령이지만 AIX에서는 동일한 -i 매개 변수를 사용할 수 없는 것 같습니다.
다음 내용을 포함하는 abc.xml이라는 파일이 있습니다.
<test0/>
<test1/>
<config/>
<test2/>
다음 명령을 사용하려고 합니다.
sed -i "s+<config />+<config>3242352353242342424</config>+g" /etc/abc.xml
abc.xml 파일의 매개변수를 다음으로 바꿉니다.
<test0/>
<test1/>
<config>3242352353242342424</config>
<test2/>
위의 내용이 가능한가요?
답변1
sed
정규식의 공백이 표시된 예제 문서와 일치하지 않기 때문에 귀하의 명령이 RedHat에서 작동할 것 같지 않습니다 . 또한 와 같은 줄 중심 텍스트 편집 도구를 사용하십시오 sed
.
두 번째 문제는 -i
비표준 옵션을 사용하는 것입니다. 내부 편집을 위한 이식 가능한 방법은 Q/A에 설명되어 있습니다.sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?
XML 문서의 형식이 올바르다고 가정하면 일반적으로 명령줄 XML 구문 분석기를 사용하여 문서의 내용을 수정합니다.
그러한 명령줄 XML 파서 중 하나가 입니다 xmlstarlet
.
xmlstarlet ed -u '//config' -v 3242352353242342424 file.xml
그러면 모든 노드의 값이 문자열( config
필요한 경우 3242352353242342424
올바르게 인코딩됨 )로 설정됩니다. xmlstarlet
이전 값은 모두 삭제되고 config
노드의 모든 속성은 유지됩니다.
수정된 문서는 표준 출력에 기록되므로 새 파일로 리디렉션할 수 있습니다. 명령줄에서 --inplace
하위 명령 뒤에 옵션을 사용할 수도 있습니다.ed
xmlstarlet
예일하는 것으로 알려져 있음Linux 및 AIX의 경우.
답변2
이 -i
옵션은 AIX에서는 지원되지 않습니다. 출력을 수동으로 리디렉션해야 합니다.
동일한 명령으로 원본 파일을 삭제하지 않는 것이 좋습니다. 먼저 백업하세요.
cp /etc/abc.xml /etc/abc.xml.bak
sed "s+<config />+<config>3242352353242342424</config>+g" /etc/abc.xml.bak \
> /etc/abc.xml
사용man sed
AIX에 사용 가능한 옵션을 검토하십시오. 명령에는 다른 많은 차이점이 있습니다. 그러나 s 명령은 제대로 작동합니다.