XML 문서에 다음 노드가 있습니다.
<client-version>1.2.8</client-version>
노드의 값을 1.2.8
로 바꾸는 방법은 무엇입니까 1.2.9
?
원하는 출력:
<client-version>1.2.9</client-version>
답변1
이를 수행하려면 XML 파서를 사용할 수 있습니다. 예 xmlstarlet
(명령줄 XML 도구):
$ xmlstarlet ed -u '//client-version' -v '1.2.9' file.xml
<?xml version="1.0"?>
<client-version>1.2.9</client-version>
위의 명령은 다음을 찾습니다.모두문서 노드의 발생 횟수 client-version
이며 해당 값을 문자열로 변경합니다 1.2.9
.
1.2.8
사용할 수 있는 항목만 변경하려면
xmlstarlet ed -u '//client-version[text() = "1.2.8"]' -v '1.2.9' file.xml
출력을 새 파일로 리디렉션하고 검사한 후 원래 파일 이름으로 이름을 바꾸거나 또는 옵션을 xmlstarlet
사용하여 실행하여 파일을 제자리에서 편집합니다.-L
--inplace
사용하다 xq
, 에서 온다 yq
, 에서 온다https://kislyuk.github.io/yq/jq
, 표현식을 사용하여 XML 문서를 수정할 수 있습니다 .
xq -x '(..|."client-version"? // empty) |= "1.2.9"' file.xml
client-version
1.2.9
이렇게 하면 문서의 위치에 상관없이 각 노드의 값이 업데이트됩니다 .
1.2.9
다음과 같이 변수에서 문자열을 삽입할 수 있습니다.
new_version=1.2.9
xq -x --arg ver "$new_version" '(..|."client-version"? // empty) |= $ver' file.xml
답변2
아래 awk 명령을 사용해 보십시오. 훌륭하게 작동합니다.
awk '$0 ~ /^<client-version>/ && $0 ~ /<\/client-version>/{gsub("1.2.8","1.2.9",$0)}1' orginalfile >temperorayfile && mv temperorayfile orginalfile