![다른 패턴에서 가장 가까운 패턴 행을 찾아 행 번호를 표시합니다.](https://linux55.com/image/123825/%EB%8B%A4%EB%A5%B8%20%ED%8C%A8%ED%84%B4%EC%97%90%EC%84%9C%20%EA%B0%80%EC%9E%A5%20%EA%B0%80%EA%B9%8C%EC%9A%B4%20%ED%8C%A8%ED%84%B4%20%ED%96%89%EC%9D%84%20%EC%B0%BE%EC%95%84%20%ED%96%89%20%EB%B2%88%ED%98%B8%EB%A5%BC%20%ED%91%9C%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
일부 반복되는 부분이 포함된 매우 긴 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