와일드카드: 점 문자를 사용하지 않고 ".txt"로 끝나는 파일만 나열하는 방법은 무엇입니까? [폐쇄]

와일드카드: 점 문자를 사용하지 않고 ".txt"로 끝나는 파일만 나열하는 방법은 무엇입니까? [폐쇄]

9개의 파일이 있는 디렉토리가 있습니다.

  • 1은 다음으로 끝납니다.bat
  • 2는 다음으로 끝납니다.bak
  • 4는 다음으로 끝납니다.txt
  • 2는 다음으로 끝납니다.xtxt

.txt제 질문은 마침표 없이 로 끝나는 파일만 나열하려면 어떻게 해야 합니까 ? 그래서 .txt명령을 사용하지 않고 엔딩 4를 표시하고 싶습니다.

ls *.txt

마침표가 있는 파일을 필터링하고 싶지 않기 때문입니다. 지금 와일드카드에 대해 배우고 있으므로 여기서는 와일드카드를 사용합니다. 어떻게든 그 명령을 사용해야 할 것 같은데 !, 어디에 사용해야 할지 모르겠습니다.

답변1

난 이해가 안 돼요..어쨌든 포함 대신 특정 문자 클래스를 사용할 수 있지만 .디렉토리의 다른 클래스는 사용할 수 없습니다. 이 목적에 적합한 후보는 다음과 같습니다 [[:punct:]].

LC_ALL=C ls -- *[[:punct:]]txt

C이에 의존하는 문자 클래스 로 로케일을 변경 하고 올바른 파일로 시작하는 모든 파일을 나열하는 옵션을 --추가 했습니다.ls-


정의:

`[:punct:]'
     Punctuation characters; in the `C' locale and ASCII character
     encoding, this is `! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \
     ] ^ _ ` { | } ~'.

답변2

Bash 셸을 사용하는 경우:

shopt -s extglob
ls !(*xtxt|*bak|*bat)

답변3

[!x]txt로 끝나는 모든 파일을 나열 하는 데 사용되지만 txt다음으로 끝나는 파일은 제외됩니다 xtxt.

ls ./*[!x]txt

(있는 경우 쉘에서 히스토리 확장을 꺼야 할 수도 있습니다 event not found.)
또는 ASCII 코드를 사용하여 포인트를 표시합니다. 예:

ls ./*$'\x2E'txt

또는

ls ./*$'\056'txt

답변4

IMO 운동에 대한 더 일반적인 대답은 입니다 ls *[^x]txt.

[!x]나는 그것이 잘 작동한다는 사실에 놀랐습니다 . 나는 !히스토리 완성을 강타하는 데 익숙하고 그것은 여전히 ​​큰따옴표 안의 특수 문자이기 때문에 이상한 문제를 일으키므로 그것을 피하려고 노력합니다!

# echo 1
1
# !echo
echo 1
1
# "!echo"
echo 1
1
# echo "the!echo"
echo theecho 1
theecho 1

testC와 같은 조건문( ) [ ! $condition ]에서 논리적 부정 에 사용되는 것으로 알고 있습니다 . 이것을 사용하면 ^정규식에서도 동일하다는 장점이 있습니다 ls | grep [^x]txt$. ( $패턴을 줄 끝에 "고정"합니다).

관련 정보