적절한 정규식을 사용하여 awk에서 패턴을 찾는 방법은 무엇입니까?

적절한 정규식을 사용하여 awk에서 패턴을 찾는 방법은 무엇입니까?

아래 예를 사용하여 regexawk program.

  • 출력은 5보다 길지 않은 숫자만 가능합니다.IG15251
  • 출력에는 문자 2개만 포함될 수 있으며, 5와 "O" 앞뒤의 숫자는 "H" & "O"선택 사항입니다.=< 3=<IGHO722 또는 799H89090
  • 출력은 다음과 같습니다.아니요공백이 포함된 단어나 숫자 이외의 단어를 포함하세요.IGHKKS kjsla aaa --> 허용되지 않음

    고양이 파일 이름

    00ISM00123
    189902
    078HP890201
    HO90902
    123H7292
    234HO7027
    12345556
    GV18029039
    kslal HOsjlk jj 123
    687iOu7900
    

나는 다음 스크립트를 시도했다

 awk  '$1~/^[0-9]{,3}([hH][oO]?)[^a-zA-Z]/' filename`

하지만 파일 이름의 숫자를 덮어쓰지 마세요.

>     189902 
>     12345556

다음 스크립트를 시도해도 출력이 여전히 올바르지 않습니다!

awk  '$1~/^([0-9]{,3}([hH][oO]?)?)[^a-zA-Z]/' filename

어떤 설명 도움이라도 대단히 감사하겠습니다!

답변1

나는 그것을 두 개의 정규 표현식으로 나누었고 이것이 작동하는 것 같습니다.

cat filename | grep -E '^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$'

정규식의 첫 번째 부분에서는 5자리 숫자만 포함된 파일 이름을 시도하고, 두 번째 부분에서는 0~3자리 숫자, 1개의 "h" 또는 "H" 문자, 0 또는 1개의 "oO" 문자, 0부터 5까지의 파일 이름 번호를 시도합니다.

이 정규식은 다음 awk과 같은 경우에도 작동합니다.

cat filename | awk  '/^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$/ {print}'

답변2

awk에 전적으로 의존하지 않는다면, grep이것은 잘 작동할 수 있습니다:

$ grep -E '\<[[:digit:]]{1,3}HO?[[:digit:]]{1,5}\>' filename
123H7292
234HO7027

이것이 당신이 찾고 있는 결과입니까? 일치해야 하는지 알고 싶습니다 HO90902.

\<단어 경계 이므로 \>"12345678H123"은 일치하지 않습니다.

관련 정보