AIX - Sed를 사용하여 파일의 문자열 바꾸기

AIX - Sed를 사용하여 파일의 문자열 바꾸기

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 sedAIX에 사용 가능한 옵션을 검토하십시오. 명령에는 다른 많은 차이점이 있습니다. 그러나 s 명령은 제대로 작동합니다.

관련 정보