`ls`와 정규 표현식이 포함 된 리스팅


15

파일 이름이 마지막 문자로 끝나고 .txt확장명을 가진 파일을 어떻게 나열 합니까?

나는 시도했다 ls *+([[:digit:]]).txt그러나 이것은 마찬가지입니다 abc12.txtabc2.txt.

그러나 나는 단지 얻을 필요가있다 abc2.txt. 어떻게해야합니까?

:digit:작업을 수행 할 수 있는 정렬 형식 이 있습니까?


2
패턴은 확장 가능한 globbing endabled 에서만 유효합니다 shopt -s extglob.
donothingsuccessfully

답변:


20

어때요?

ls *[!0-9][0-9].txt

!그룹의 시작은 그 의미를 보완합니다.

의견에서 언급했듯이 이것은 bash 가하는 일입니다. 예를 들어보십시오.

printf "%s\n" *[!0-9][0-9].txt

3
bash (ie ls)는 여기서 정규 표현식을 지원하지 않습니다. 이것들은 파일 이름 표현식입니다 (Globbing) . 예제에서 이미 차이점을 볼 수 있습니다. 여기, *와일드 카드는 정규식에는 없지만 와일드 카드를 사용 .*하는 데 사용 됩니다. 정규식은 globbing보다 훨씬 강력합니다.
Christopher K.

2

질문은 정규식을 요구했습니다. Bash ls는 여기서 정규 표현식을 지원하지 않습니다. 지원하는 것은 파일 이름 표현식 ( Globbing ), 와일드 카드 형식입니다. 정규식은 그보다 훨씬 강력합니다.

정규식을 실제로 사용하려면 다음 find -regex과 같이 사용할 수 있습니다 .

find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'

찾기는 기본적으로 재귀 적이지만 ls그렇지 않습니다. 현재 디렉토리에서 파일 만 찾으려면을 사용하여 재귀를 비활성화 할 수 있습니다 -maxdepth 1. 경로가있는 파일 이름과 일치하는 항목을 찾으십시오. 그래서 ./find in을 실행하면 파일 이름이 시작 됩니다 .. 정규식은 그에 \./대처하기 시작 합니다. 정규 표현식에서 .모든 문자와 일치하는 특수 문자이지만 여기서는 점을 원하므로 백 슬래시로 이스케이프 처리해야합니다. 우리는 점에서 똑같이합니다. .txt왜냐하면 정규 표현식도 그렇지 않기 때문 Atxt입니다. 숫자 클래스는 globbing과 동일하지만 문자 클래스를 반전시키는 ^대신에 필요 합니다 !.

의 출력을 얻으려면 ls다음 -exec ls과 같이 사용할 수 있습니다 .

 find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;

find몇 가지 다른 정규식 맛을 지원합니다. -regextype예를 들어을 지정할 수 있습니다 .

find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'

나에게 가능한 유형은 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic'입니다. , 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'sed' find -regextype help시스템에서 지원되는 항목을 찾기 위해 실행할 수 있습니다 .


0

이미 사용중인 ksh 확장 글로브 (또는 bash -O extglob또는 zsh -o kshglob)를 사용하면 다음과 같습니다.

ls -d -- ?(*[![:digit:]])[[:digit:]].txt

또는

ls -d -- !(*[[:digit:]])[[:digit:]].txt

일치 a1.txt 하고2.txt 싶지만 a12.txtnor 12.txt.

그러나 ksh 및 bash에서 ( failglobzsh와 비슷한 동작을 수행 하도록 옵션을 설정하지 않는 한 ) 해당 패턴이 파일과 일치하지 않으면 패턴이 문자 그대로로 전달 ls되고 해당 파일이 (이상하게 명명 된) 경우 존재하는 ls경우 패턴 자체와 일치하지 않더라도 나열 됩니다.

포함하려면 .2.txt의 설정 dotglob에서 옵션을 bash추가, (D)글로브의의 규정 zsh또는 설정을 FIGNORE!(.|..)에를 ksh93.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.