일부 반복되는 부분이 포함된 매우 긴 XML 파일이 있습니다. 문자열 A에 가장 가까운 문자열 B가 나타나는 줄 번호를 찾고 싶습니다. 많은 인스턴스가 있다고 가정해 보겠습니다.
<section>
...
<entry>
<key>key-im-looking-for</key>
...
</entry>
...
<type>org.apache.whatever.package</type>
...
</section>
다음을 포함하는 줄 번호를 찾고 싶습니다.
key-im-looking-for
<type>org.apache.whatever.package</type>
grep, awk 또는 sed를 사용하여 검색어와 가장 가까운(또는 동일한 섹션에 포함된) 검색어를 찾으세요.
답변1
첫째, XML에서 줄 번호를 찾는 것이 약간 이상하다는 것을 알았습니다. XML은 공백이 관련이 없는 트리 구조이므로 줄 번호도 관련이 없습니다. 이게 맞는지 궁금해지네요XY 문제.
둘째, 줄 번호 문제를 무시한다면 일반적으로 적절한 XML 파서나 XPATH 쿼리를 수행할 수 있는 것을 사용하는 것이 더 좋습니다. XML 측면에서 귀하의 질문은 "X 유형 노드의 키는 무엇입니까?"에 더 가깝습니다. 이는 XML로 작업할 때 타당하고 잘 정의된 질문입니다.
즉, "가장 가까운"이 <key>
항상 먼저 나온 다면 <type>
awk에서 이 알고리즘을 고려할 수 있습니다.
- 행이 일치하면
<key>key-im-looking-for<
행 번호를 기록하십시오. - 행이 일치하면
<type>org.apache.whatever.package<
처리를 중지합니다. - 마지막으로 인쇄된 레코드의 줄 번호
이 같은:
awk '/<key>key-im-looking-for</ { line=NR }
/<type>org.apache.whatever.package</ { exit }
END { print line }' input.xml
답변2
이는 다음 명령을 사용하여 가능합니다:
cat -n sample.xml | grep key-im-looking-for
# or
grep -n key-im-looking-for sample.xml