특수 문자와 함께 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로 변경합니다.

관련 정보