다음과 같은 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로 바꾸려고요.