아래와 같이 XML 파일로 가득 찬 디렉토리가 있고 해당 "오프셋" 요소 번호의 값을 1에서 다른 숫자로 변경하고 싶습니다.
$ cat my.xml
<offset xmlns="">1</offset>
나는 이 sed 명령의 다양한 조합을 작성했지만 시도한 명령 중 어느 것도 작동하지 않았습니다. 일부 문자를 이스케이프 처리해야 한다고 확신하지만 제가 시도한 문자는 항상 오류("예기치 않은 토큰", "알 수 없는 옵션" 등)로 끝납니다. 또한 -e 플래그는 실제로 표현식이 아니기 때문에 사용하지 않으려고 노력했습니다.
sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml
어떤 도움이라도 대단히 감사하겠습니다.
답변1
/
sed에서는 사용할 필요가 없으며 쉼표를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE
답변2
이 시도,
$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
<offset xmlns="">99</offset>
입력에 슬래시가 포함된 경우 다른 sed 구분 기호를 사용하세요.
답변3
s/earch/replace/
일반적으로 함수 자체에서는 이 모든 것이 필요하지 않지만 먼저 /address/
조건부로 수행 할 수 있습니다 /s///
. 가독성을 높이고 언급한 일부 문제를 방지하는 데 도움이 될 뿐만 아니라 성능도 향상됩니다.
sed '/offset xmlns=/s/>1</>99</'
답변4
값이 포함된 줄의 17번째 문자를 바꾸겠습니다.
sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml
VALUE를 새 값으로 바꿉니다 <offset>
. 예를 들어.
sed -i 's/^\(.\{17\}\)./\18/' file.xml
8로 변경합니다.