변수와 함께 sed를 사용하십시오.

변수와 함께 sed를 사용하십시오.

그래서 저는 sed를 사용하여 특정 문자열을 찾고 바꿉니다.

사례 1. 파일의 값은 항상 상수입니다. 매개변수를 false에서 true로 바꾸고 싶습니다. 그래서 저는 다음 명령을 사용합니다.

    sed -i -e 's/entry key="ignore_vc_cert" value="false"/entry key="ignore_vc_cert" value="true"/g'  /usr/local/avamar/var/mc/server_data/prefs/mcserver.xml

ignore_vc_cert그러면 해당 값을 찾아 에서 false로 변경합니다 true. 좋은 결과.

다음으로, 다음 매개변수가 포함된 또 다른 파일이 있습니다.

<numberOfDisk>4</numberOfDisk>

이제 여기의 값은 배포에 따라 변경될 수 있습니다. 4여기에 있는 숫자나 다른 것을 다음 출력으로 바꾸고 싶습니다.df -h | grep data0* | wc -l

df -h | grep data0* | wc -l따라서 의 출력이 is이면 매개변수의 값 from을 3to로 바꿔야 합니다.numberOfDisk43

나는 다음 명령을 썼다:

sed -e s/"$(cat /usr/local/vdr/etc/vdr-configuration.xml  | grep -i numberOfDisk)"/<numberOfDisk>"$(df -h | grep data0* | wc -l)"</numberOfDisk>/g > /usr/local/vdr/etc/vdr-configuration.xml

하지만 어떤 이유로 나는numberOfDisk: No such file or directory

만약 내가한다면:

sed -e 's/"$(cat /usr/local/vdr/etc/vdr-configuration.xml  | grep -i numberofdisk)"/<numberOfDisk>"$(df -h | grep data0* | wc -l)"</numberOfDisk>/g' /usr/local/vdr/etc/vdr-configuration.xml

그러면 나는 다음을 얻습니다: sed: -e expression #1, char 15: unknown option tos''

이 문제를 해결하는 방법에 대한 의견이 있으십니까?

답변1

XML 문서를 조작하려면 XML 파서/도구를 사용하십시오.

내가 함께 할게xmlstarlet.

grep -c 'data0*'- 파이프가 필요 없이 일치하는 라인 수를 출력합니다.wc -l


xmlstarlet ed -u "//numberOfDisk" -v $(df -h | grep -c 'data0*') /usr/local/vdr/etc/vdr-configuration.xml > /tmp/tmp-test.xml 
           && mv /tmp/tmp-test.xml /usr/local/vdr/etc/vdr-configuration.xml

ed- 편집 모드

-u( --update) - XML ​​문서 업데이트

답변2

이 시도. 기존 디스크 번호 이전의 모든 항목을 \1로 가져오고 그 이후의 모든 항목을 \2로 가져옵니다. 그런 다음 \1이 인쇄되고, 그 다음 출력되고 df ..., 그 다음 \2가 인쇄됩니다.

sed -e 's/\(^.*numberOfDisk>\)[0-9]*\(<.*\)/\1'$(df -h | grep -c data0)'\2/' vdr-configuration.xml

또 다른 (더 짧은) 방법

sed -e '/numberOf/s/[0-9]\+/'$(df -h|grep -c data0)'/' vdr-configuration.xml

관련 정보