"가 있는 줄만 Grep하세요...." 다음 줄에는 특정 라벨과 값이 포함되어 있습니다.

"가 있는 줄만 Grep하세요...." 다음 줄에는 특정 라벨과 값이 포함되어 있습니다.

를 사용하면 태그가 grep포함된 모든 xml 파일의 줄과 그 뒤의 다음 줄만 원합니다 .<active>true</active><codePool>community</codePool>

샘플 XML 파일은 다음과 같습니다.

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <active>true</active>
            <codePool>core</codePool>
            <depends>
                <Company_Module2 />
            </depends>
        </Company_Module>
    </modules>
</config>

하지만 폴더에 비슷한 파일이 많고 XML 구조도 동일합니다.

내 현재 grep명령은 다음과 같습니다

grep -rl '<active>true</active>' --include='*.xml' --color=always

명령줄 검색에서 이를 어떻게 달성할 수 있습니까?

답변1

모든 XML 파일이 현재 디렉토리에 있고 패턴과 일치한다고 가정합니다 *.xml.파일 이름지정된 XML을 포함하려는 파일:

$ xml sel -t -i '/config/modules/Company_Module[active = "true" and codePool = "community"]' -f -nl ./*.xml

이는 다음을 사용합니다.XML 스타( xml그러나 때때로 다음과 같이 설치됨 xmlstarlet) 이것은 명령줄 XML 구문 분석 도구입니다.

지정된 XPath 표현식과 일치하려고 시도하고 일치하는 경우 일치하는 XML이 포함된 입력 파일의 파일 이름을 출력합니다.

XML 파서를 사용하기 때문에 노드 내의 태그 순서와 무관합니다 <Company_Module>.

답변2

grep글쎄요, 오랫동안 사용해오던 명령어를 떠나고 싶지 않네요 .

그래서 저는 다음과 같은 방법을 찾았습니다.

grep -rzl '<active>true</active>.*<codePool>community</codePool>' --include='*.xml' --color=always

이것은 나에게 잘 작동합니다.

답변3

grep -A1 "<active>" *.xml

A1 -> 패턴과 다음 줄을 인쇄합니다.

관련 정보