![Awk 검색 - 동일한 문자열의 문자 클래스 결합](https://linux55.com/image/88278/Awk%20%EA%B2%80%EC%83%89%20-%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EB%AC%B8%EC%9E%90%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B2%B0%ED%95%A9.png)
좋은 저녁이에요,
여러 문자 클래스를 동시에 사용하려고 했지만 성공하지 못했습니다. HTTP 트래픽 URI가 포함된 열이 있는 경우 REGEX에서 URI 필드에 6~10자 길이의 텍스트 문자열(숫자 포함)이 포함된 행을 식별하고 싶습니다.그리고소문자...각각 하나 이상이지만 대문자는 사용할 수 없습니다.
이 검색은 특정 문자나 문자열의 일부로 제한되지 않습니다.
테스트 문자열:
aasd4567
9f7g6s5df
0hjksdf73
123456789
12345/1234a
Wordswords
W0rdsW4rds
aasd4/567af
9f7g6s5dfasdf
0hjks/asdf
12345/1234asd
Wordswords12
W0rdsW4rds12312312
괄호로 묶인 부울을 사용할 수 있기를 바랍니다. 즉:
awk --re-interval '$1 ~ /([0-9]+&[a-z]+){6,10}/'
그러나 이것은 작동하지 않습니다. 분명히, 그것들을 결합하는 것도 효과가 없습니다. 왜냐하면
awk --re-interval '$1 ~ /[a-z0-9]{6,10}/'
여전히 숫자와 소문자 없이 문자열을 반환합니다.
나는 [[:lower:]]와 [[:digit:]]를 결합하는 방법을 찾으려고 노력했지만 위의 첫 번째 예와 동일한 문제에 직면했습니다.
나는 이것이 매우 간단한 수정이라고 확신합니다. 내가 무엇을 놓치고 있습니까? 나는 작업에 가장 효율적인 도구인 gawk/grep/sed/etc를 사용하는 것에 반대할 생각이 없습니다.
감사해요
답변1
귀하의 질문을 올바르게 이해했다면 match
먼저 RSTART
및 RLENGTH
일치하는 문자열을 추출한 다음 숫자와 문자가 있는지 확인하십시오.
awk --re-interval '{match($1, /[[:lower:][:digit:]]{6,10}/);
x=substr($1, RSTART, RLENGTH)}; x ~ /[[:lower:]]/ && x ~ /[[:digit:]]/' test_strings
테스트 문자열이 주어지면 다음이 생성됩니다.
aasd4567
9f7g6s5df
0hjksdf73
9f7g6s5dfasdf
12345/1234asd
Wordswords12
W0rdsW4rds12312312