`/bin/sh` 셸의 정규식

`/bin/sh` 셸의 정규식

쉘의 특정 디렉토리에서 특정 확장자로 끝나는 모든 파일을 삭제하고 싶습니다 /bin/sh. 나는 /bin/bash이것을 할 수 있다:regex

rm path/(*.pdf|*.png)

그러나 이것은 일반적인 sh에서는 작동하지 않는 것 같습니다. 정상인가요? 어떤 종류의 정규 표현식이 있습니까 support?

답변1

아니요, 이는 엄격한 POSIX 호환 셸에서는 작동하지 않습니다. 다음은 규범적인 참조입니다.

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_03

보시다시피 정규 표현식은 전혀 없습니다. 심지어 {a,b} 중괄호 표기법도 없습니다.

답변2

에서 언급했듯이사용자 3188445의 답변이는 POSIX와 호환되지 않습니다.

하지만 어쨌든 그렇게 하고 싶다면 다음과 같은 다른 도구를 사용해야 합니다 find.

find dir/ -maxdepth 1 -type f -regex ".*.pdf\|.*.png" -delete

finddir/재귀적으로( ) 검색하지 않고 dir 을 검색하고 -maxdepth 1, 파일( )만 찾습니다 -type f. 정규식은 .pdf 및 .png 파일을 일치시키고 -delete발견된 파일을 삭제합니다.

답변3

/bin/sh에서 사용되는 실제 쉘을 확인하려면 다음을 호출하십시오.

/bin/sh whatshell.sh

그리고 이 페이지에서 Whatshell 스크립트를 얻으세요:

http://www.in-ulm.de/~mascheck/various/whatshell/

예를 들어 전화하십시오.wget http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh

일반적인 출력:

$ sh whatshell.sh
SVR4 Bourne shell (SunOS 5 variant)

$ bosh whatshell.sh
SVR4 Bourne shell (SunOS 5 schily variant)

$ bash whatshell.sh
bash 3.2.25(1)-release

$ ksh whatshell.sh 
ksh88 Version (..-)11/16/88i

$ ksh93 whatshell.sh
ksh93 Version M 1993-12-28 s+

POSIX에는 /bin/sh에 POSIX 쉘이 필요하지 않습니다. POSIX 쉘 호출을 실행하려면 다음을 수행하십시오.

PATH=`getconf PATH` export PATH
sh

이로 인해 bash가 실행되는 경우 쉘은 POSIX와 호환되지 않을 것으로 예상됩니다.

관련 정보