특정 줄에서 특정 문자열을 찾아 바꾸는 방법

특정 줄에서 특정 문자열을 찾아 바꾸는 방법

모든 하위 디렉터리 아래의 모든 xml에서 특정 문자열을 찾아 바꿀 수 있는 코드를 개발했습니다. 하지만 나는 일어난 모든 일이 대체되는 것을 원하지 않습니다. XML 전체에서 코드는 xyz 태그를 찾고 해당 태그 내의 xyz를 abc로 바꿔야 합니다. XML의 다른 "xyz"는 그대로 유지되어야 합니다. 이 문제를 해결하는 데 도움을 주실 수 있나요?

감사해요...

답변1

sed를 사용하여 동일한 작업을 수행할 수 있습니다.

sed -i.bkp  5'i'"s/search/replace/"  inputfile
  • -i.bkp inpufile.bkp로 백업하고 원본 파일 편집
  • 5'i' 5번째 줄로 이동
  • s/ 검색 및 바꾸기

특정 단어 "NAME"을 검색하고 같은 줄에서 "RAM"을 검색하여 "SHYAM"으로 바꿀 수도 있습니다. 아래 예를 참조하세요.

sed -e '/NAME/s/RAM/SHYAM/g' filename

인용하다협회

답변2

@donothingsucces가 언급했듯이 abc 태그 안에 xyz 태그와 같은 요구 사항이 있는 경우 간단한 텍스트 교체로 xml을 수정하는 것은 일반적으로나쁜 생각 매우 엄격하고 알려진 입력 xml 파일 형식이 없는 경우는 드뭅니다. XML을 이해하는 것이 필요합니다.

xml-sed~에서xml-coreutils줄 대신 "echo-leaf"에서 sed 명령을 실행할 수 있습니다. 이는 기본적으로 sed가 PATH가 있는 xml 조각에서 실행된다는 의미입니다. 그래서 당신은 다음과 같은 것을 가질 것입니다

xml-sed 's/oldstring/newsting/' file.xml :/abc/xyz

파이썬 lxml또는Perl XML::나뭇가지스크립트를 작성할 수 있으면 작동합니다.

관련 정보