두 개의 xml 태그를 grep하고 단일 명령을 사용하여 출력을 인쇄합니다.

두 개의 xml 태그를 grep하고 단일 명령을 사용하여 출력을 인쇄합니다.

다음과 같은 XML 구조가 있고 grep을 사용하여 단일 명령에서 CUSTOMER_ID 및 STORE_ID 태그의 처음 두 글자를 추출하려고 합니다. 다음을 사용하여 단일 레이블에 대해 이 작업을 수행할 수 있습니다.

grep -oP '(?<=< STORE_ID >).*(?=< /STORE_ID >)' filename.* | awk '{print substr($0,2,2)}'
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

두 개 이상의 태그에 대해 이 작업을 수행하는 방법은 무엇입니까?

출력은 한 줄에 있어야 합니다. 예를 들어 위의 경우 결과는 12 my 여야 합니다.

참고: 여러 파일의 출력을 원합니다. 그래서 넣어야 해요filename.*

답변1

제공한 입력 및 출력 예제를 기반으로 sed단일 파일에 대한 간단한 솔루션은 다음과 같습니다 infile.

$ cat infile
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

$ sed -n -e 's/<CUSTOMER_ID>\(..\)\(.*\)<.*>/\1/p' -e 's/<STORE_ID>\(..\)\(.*\)<.*>/\1/p' infile | sed '$!N;s/\n/ /'
12 my
$

위 내용을 간단한 쉘 스크립트 루프로 래핑하면 여러 파일을 쉽게 처리할 수 있습니다.

관련 정보