大文字と小文字を無視し、特定のパターンに一致するすべてのファイルを一覧表示したいと思います。
たとえば、次のコマンドを実行します。
ls *abc*
大文字と小文字を無視し、ファイル名に「abc」を含むすべてのファイルを表示したいと思います。
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt
ノート
マンページでケースを検索しましたが、何も見つかりませんでした。
答え1
これは実際には.dllではなくシェルによって行われますls
。
では、bash
以下を使用できます。
shopt -s nocaseglob
そしてそれからコマンドを実行します。
またはzsh
:
unsetopt CASE_GLOB
またはYashから:
set +o case-glob
これで注文が来ます。
.bashrc
それぞれ、.zshrc
またはに入れることもできます.yashrc
。
またはzshを使用してください。
setopt extendedglob
ls -d -- (#i)*abc*
(つまり、ワイルドカードごとに大文字と小文字を区別しないワイルドカード)
ksh93の使用:
ls -d -- ~(i:*abc*)
欲しいワイルドカード代わりに、シェルが渡されるファイルであるls
ため、動作が異なります。ls
答え2
*abc*
Polemonが説明したように、ファイルのリストに展開されるのはlsではなくシェルです。これは…パターンマッチング。
大文字と小文字を無視するようにパターン一致の動作全体を変更する代わりに、*
次のように bash で目的の操作を実行できます。
ls *[aA][bB][cC]*
bashユーザーから:
[...]は含まれている文字の1つと一致します。
これにより、より細かい一致が可能になります。*[aA][bB]c*
またはを使用して一致させることはできますが、またはを使用して一致させることはできません。または、その文字のすべてのインスタンスを一致させるフランス語の例は次のとおりです。abc
ABc
abC
ABC
e
ls *[eéèêëEÉÈÊË]*
答え3
-i
(--ignore-case)オプションを追加して、次のgrep
出力を取得することもできます。
[root@localhost ~]# ls -l | grep -i abc
-rw-r--r-- 1 root root 0 Feb 25 20:41 fileabc.txt
-rw-r--r-- 1 root root 0 Feb 25 20:41 fileABC.txt
答え4
次のコードを使用してください。
LC_COLLATE=en_US ; export LC_COLLATE
ls *abc*
LC_COLLATE=C ; export LC_COLLATE