아래 예를 사용하여 regex
내 awk 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"은 일치하지 않습니다.