특정 구조의 폴더 이름을 캡처하는 정규식

특정 구조의 폴더 이름을 캡처하는 정규식

이 구조를 사용하여 폴더 이름을 캡처하는 정규식은 무엇입니까?

xxxx-x (x - 정수)

 ls /usr/hdp | .....
 2.6.0.3-8  current HG_MASTER 2.4.3 34.1 45-995

예상 출력

2.6.0.3-8



ls -lh /usr/hdp/
total 8.0K
drwxr-xr-x. 27 root root 4.0K Jan  1 15:24 2.6.0.3-8

답변1

태그한 이후로, 확장된 glob을 사용하여 쉘의 파일 이름 일치를 통해 실제로 이 작업을 수행할 수 있습니다.

$ shopt -s extglob
$ touch /some/path/{2.6.0.3-8,22.66.0.333-8,foobar}
$ printf "%s\n" /some/path/+([0-9]).+([0-9]).+([0-9]).+([0-9])-+([0-9])
/some/path/22.66.0.333-8
/some/path/2.6.0.3-8

패턴은 *또는 와 같은 보다 일반적인 패턴처럼 작동 *.png하므로 고정된 부분(예: 경로)을 붙여넣을 수 있습니다. /디렉터리만 일치시키려면 뒤에 슬래시를 추가하세요 . (단, 출력에는 슬래시도 나타납니다.)

ERE 정규 표현식에서 패턴은 [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+. 난독화된 버전은 +([-.0-9])(또는 ERE에서) 와 같은 허용된 문자만 확인 [-.0-9]+하지만 물론 예를 들어 123..456.

파일 이름만 인쇄하려는 경우 find더 쉬울 수 있지만 파일 이름에 대해 명령을 실행하려는 경우 셸 루프도 옵션입니다( 와 함께 find -exec).

답변2

find . -type d -regextype posix-egrep -regex '^./([0-9]+[.]){3}[0-9]+[-][0-9]+'

find를 사용한 다음 regextype 플래그를 사용하여 reg 표현식 구문을 egrep으로 설정합니다. -regex를 사용하여 3자리 숫자와 "점", 숫자, "대시" 및 숫자를 확인하세요.

숫자가 두 문자 이상인 경우 각 숫자 뒤에 +를 추가해야 합니다.

답변3

대신에 그것을 사용해야합니다 find. 정확히 일치하는 사용 패턴의 경우:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-[0-9]*"

다음을 포함하는 파일이 필요한 경우숫자, 이름의 기호는 다음 .과 같습니다.-

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[.0-9-]*"

답변4

ls /usr/hdp | egrep '[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+'

관련 정보