![동일한 캡처 그룹 및 재사용 방법](https://linux55.com/image/134955/%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%BA%A1%EC%B2%98%20%EA%B7%B8%EB%A3%B9%20%EB%B0%8F%20%EC%9E%AC%EC%82%AC%EC%9A%A9%20%EB%B0%A9%EB%B2%95.png)
sed
작동하는 다음 정규식이 있습니다 .
sed -i -E "s/customer_metadata[(]([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6])/\5,$NEW_DATA/g" file
하지만 그룹을 잡는 패턴이 반복되기 때문에 단순화할 수 있지 않을까 생각합니다. 또한 \5
각 세트마다 하나씩 있기 때문에 두 번째 세트를 계산한다는 사실은 ()?
오류가 발생하기 쉬운 것 같습니다.
이 정규식을 개선할 수 있는 방법이 있나요?
답변1
[0-9][0-9][0-9]*
동일합니다[0-9]{2,}
.([A-Z][a-z]-){0,1}
동일합니까?([A-Z][a-z]-)?
- 일부 괄호를 제거하세요.
약식 표현:
customer_metadata[(][0-9]{2,}-([A-Z][a-z-]-)?[3-6],[0-9]{2,}-([A-Z][a-z]-)?[3-6],([0-9]{2,}-([A-Z][a-z]-)?[3-6])
그렇지 않으면
customer_metadata[^,]+,[^,]+,([0-9]{2,}-([A-Z][a-z]-)?[3-6])
이는 매우 주의 깊게 처음 두 쉼표 사이의 비트 형식이 올바른지 확인해야 하는지 여부에 따라 다릅니다.
그렇지 않으면
customer_metadata[^,]+,[^,]+,([^-]+-([^-]+-)?.)
세 번째 쉼표로 구분된 문자열이 something-something-character
또는 형식 인지 확인합니다 something-character
.