2012-07-11 2 views
3

나는 bash에서 와일드 카드를 실험하고 "xyz"로 시작하지만 ".TXT"로 끝나지는 않지만 잘못된 결과를 얻는 모든 파일을 나열하려고했습니다. 그것은 이름 "XYZ"나는 내 디렉토리에있는 "xyzTXT"와 파일을 나열되지와일드 카드를 사용하여 특정 접미사가있는 파일 제외

$ ls -l xyz*[!\.TXT] 

: 여기

내가 시도 명령입니다. 그러나 "xyz1", "xyz123"이 나열됩니다.

"xyz *"다음에 [!\.TXT]을 추가 한 것처럼 보입니다. 쉘은 "xyz"로 시작하고 그 뒤에 적어도 하나의 문자가있는 것을 찾습니다.

왜 그런 일이 벌어지고 있고이 명령을 수정하는 방법에 대한 아이디어가 있습니까? 다른 명령을 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 특히 실패 이유와 와일드 카드를 사용하여 수행 할 수 있는지를 아는 데 특히 관심이 있습니다.

답변

4

나는이 만 와일드 카드 행할 생각하지 않습니다. xyz 당신이 원하는대로 뒤에있다

일치 모든 그것은 필연의 문자로 끝날 수 없습니다 :

이 의미하기 때문에 귀하의 명령이 작동하지 않습니다 \, ., TX을. 두 번째 T은 내면의 문자 수를 계산하지 않습니다. []은 생각한대로 문자열이 아니라 문자 집합으로 읽습니다.

와일드 카드 안에 특별한 의미가없는 한 .을 '도주'할 필요가 없습니다.

적어도 이것은 와일드 카드에 대한 나의 지식입니다.

+0

그 말이 맞는 것 같습니다. 감사. –

+0

@RameshSamane, 예를 들어'xyzwhateverTXTyouwant','xyzwhateveryouwant' 및'xyzwhateveryouwantX'라는 파일로 몇 가지 테스트를 수행하십시오. 당신의 방법은 첫 번째 방법은 효과가 있지만 다른 두 가지 방법은 실패 할 것입니다. – Zagorax

+0

네, 맞습니다. 나는 그것을 확인했다. –

7

이 명령은

shopt -s extglob 
ls -l xyz!(*.TXT) 
shopt -u extglob 

작동하지 않는 명령의 xyz *의 beacause를하는 이유 원하는 것을 할 것 [을! \. TXT] XYZ의 *의에 해당하는 [! \. TX] 수단 xyz 다음에 임의의 문자 (*)가 나오고 마지막으로 {!, \,., T, X} 문자가 일치하므로 'xyzwhateveryouwant!' 'xyzwhateveryouwant \' 'xyzwhiteveryouwant.' 'xyzwhateveryouwantT' 'xyzwhateveryouwantX'

편집 :!. whateveryouwant이 중 하나를 포함하지 않는 \는 TX는

+1

네,이 작품과 많은 솔루션을 주셔서 감사합니다,하지만 내가 왜 시도 명령은 "xyz"및 "xyzTXT"파일에 대한 작동하지 않았다? –

+0

귀하의 명령은 xyz로 시작하고! \ 내의 임의의 문자로 끝나는 모든 파일과 일치합니다. TX –

+0

다음 명령으로 두 개의 파일을 생성했습니다 : touch xyz! xyz를 터치합니다. 끝으로 끝나는 첫 번째! 목록으로 표시되지만 두 번째로 끝나는 것은 아닙니다. (점), 나는 생각한다! 부정을위한 것이지만 xyz 파일을 인쇄하는 이유입니다! 여전히 수수께끼이다. –

관련 문제