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
.