Bash : 문자열 [duplicate]에서 grep과 일치하는 모든 문자열을 얻는 가장 좋은 방법

Nov 23 2020

문자열에서 일치하는 모든 값을 가져 오는 방법을 찾는 데 문제가 있습니다. 변수에 저장된 XML 문자열이 있습니다. 그 변수에서 grep으로 문자열을 추출합니다. 그것은 하나의 일치에 잘 작동하지만 grep은 첫 번째 일치 값만 반환하기 때문에 내가 원하는 방식으로 정확히 작동하지 않습니다.

XML="..."

VALUE=($(grep -oP "<tag>(.*)</tag>" <<<"${XML}" | cut -d ">" -f 2 | cut -d "<" -f 1))

값을 찾고 기존 XML 문자열에서 대체하여 더 이상 일치하지 않게 한 다음 일치하는 항목이 없을 때까지 루프에서 실행하는 것보다 더 나은 / 스마트 한 방법이 있습니까?

간단한 XML 예 :

<?xml version="1.0" encoding="UTF-8"?>
<xmlDoc>
  <docName>...</docName>
  <formats>
    <format>
      <name>a:1</name>
    </format>
    <format>
      <name>b:2</name>
    </format>
  </formats>
</xmlDoc>

답변

1 etsuhisa Nov 23 2020 at 10:36

여러 줄로 분할하고 grep 명령을 실행합니다.

VALUE="$(sed 's#</tag>#</tag>\n#g' <<<"${XML}" | grep -oP "<tag>(.*)</tag>" | cut -d ">" -f 2 | cut -d "<" -f 1)"