Bash 스크립트 - 태그 내의 텍스트 출력

Bash 스크립트 - 태그 내의 텍스트 출력

태그 안에 콘텐츠를 가져와야 하는 파일이 있습니다. 예를 들어:

<Model500>
ABC
BCD 
CDE
</Model500>


<Model500>
123
234
345
</Model500>

의 내용을 추출하고 싶습니다.

<Model500>
</Model500>

"sed"를 사용하세요

그래서 그것은 다음과 같습니다

ABC
BCD
CDE

123
234
345

나는 사용해 보았습니다.

sed -e 's/<Model>\,/</Model>/p' file.txt

하지만 특수 문자로 인해 문제가 발생했습니다. 어떤 제안이 있으십니까? 감사해요.

답변1

입력이 XML인 경우 XML 관련 도구를 사용하는 것이 가장 좋습니다.

방법 1

sed 정규식에 a를 포함하는 한 가지 방법은 /백슬래시를 사용하여 이스케이프하는 것입니다.

$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

이 표현식은 /<Model500>/,/<\/Model500>/행 범위를 지정합니다. 범위는 일치하는 줄로 시작 <Model500>하고 일치하는 줄로 끝납니다 <\/Model500>. 대체 명령이 아닌 범위를 지정하므로 표현식은 로 시작하지 않습니다 s.

방법 2

이스케이프를 원하지 않으면 다른 구분 기호를 사용할 수 있습니다.

$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

여기서는 구분 기호로 사용합니다 |. /구분 기호 이외의 구분 기호가 범위에 사용되었음을 나타내려면 첫 번째 구분 기호를 이스케이프해야 합니다 \|.

답변2

문자열에 </Model>/문자가 포함되어 있으므로 sed 표현식에서 이 문자를 이스케이프하거나 다른 문자를 사용하여 sed 표현식을 구분해야 합니다. 다행스럽게도 sed는 어떤 단일 문자라도 사용하여 표현식을 구분할 수 있으므로 입력에 나타나지 않는 문자만 선택하면 됩니다.

보다 일반적으로 sed는 현재 작업에 가장 적합한 선택이 아닐 수도 있습니다. XML 파일을 구문 분석하는 것 같으므로 sed와 함께 무언가를 해킹하는 대신 XML 구문 분석용으로 구축된 라이브러리를 활용해야 할 것입니다. 바라보다이 게시물이것이 왜 나쁜 생각인지 알아보세요.

관련 정보