![두 개의 xml 태그를 grep하고 단일 명령을 사용하여 출력을 인쇄합니다.](https://linux55.com/image/174544/%EB%91%90%20%EA%B0%9C%EC%9D%98%20xml%20%ED%83%9C%EA%B7%B8%EB%A5%BC%20grep%ED%95%98%EA%B3%A0%20%EB%8B%A8%EC%9D%BC%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같은 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
$
위 내용을 간단한 쉘 스크립트 루프로 래핑하면 여러 파일을 쉽게 처리할 수 있습니다.