특수 문자와 함께 sed 사용

특수 문자와 함께 sed 사용

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

관련 정보