를 사용하면 태그가 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 -> 패턴과 다음 줄을 인쇄합니다.