ワイルドカード:ドット文字を使用せずに「.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$。 ($パターンを行末に「固定」します)。

関連情報