`ls`と正規表現を使用したリスト


15

ファイル名の最後の文字と拡張子で終わるファイルをリストするにはどうすればよい.txtですか?

私が試してみましたls *+([[:digit:]]).txtが、これはのために真であるabc12.txtabc2.txt

しかし、私は取得する必要がありますabc2.txt。どうやってやるの?

:digit:これを行う何らかの形式はありますか?


2
パターンは、拡張グロッビングendabledでのみ有効ですshopt -s extglob
-donothing正常に

回答:


20

どうですか:

ls *[!0-9][0-9].txt

!グループの先頭には、その意味を補完します。

コメントに記載されているように、これはbashの機能です。たとえば、次のことを試してください。

printf "%s\n" *[!0-9][0-9].txt

2
ここで、bash(つまりls)は正規表現をサポートしないことに注意してください。これらはファイル名式(Globbing)です。あなたはすでにあなたの例で違いを見ることができます:ここに*、ワイルドカードがありますが、これは正規表現にはありません.*。正規表現は、グロビングよりもはるかに強力です。
クリストファーK.

2

質問は正規表現を求めました。Bash、したがってls、ここでは正規表現をサポートしていません。サポートするのは、ワイルドカードの形式であるファイル名式Globbing)です。正規表現はそれよりもはるかに強力です。

本当に正規表現を使用したい場合は、次のfind -regexように使用できます。

find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'

Findはデフォルトでは再帰的ですが、そうでlsはありません。現在のディレクトリでのみファイルを検索するには、で再帰を無効にできます-maxdepth 1。パスを含むファイル名と一致./するものを検索し.ます。そのため、でfindを実行した場合、ファイル名はで始まります。正規表現はそれ\./に対処するために始まります。正規表現で.は、任意の文字に一致する特殊文字ですが、ここではドットが本当に必要であることに注意してください。そのため、バックスラッシュでエスケープします。.txtそうでない場合は正規表現も一致するため、ドットドットについても同じことを行いAtxtます。数字クラスはグロビングの場合と同じですが、文字クラスを反転する^代わりに必要なだけです!

の出力を取得する場合はls、次の-exec lsように使用できます。

 find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;

findいくつかの異なる正規表現フレーバーをサポートします。-regextypeたとえば、を指定できます。

find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'

私にとって可能なタイプは、「findutils-default」、「awk」、「egrep」、「ed」、「emacs」、「gnu-awk」、「grep」、「posix-awk」、「posix-basic」です。 、「posix-egrep」、「posix-extended」、「posix-minimal-basic」、「sed」を実行find -regextype helpすると、システムでサポートされているものを確認できます。


0

kshがグロブ(または拡張してbash -O extglobか、zsh -o kshglob既に使用していること)を、それは次のようになります。

ls -d -- ?(*[![:digit:]])[[:digit:]].txt

または

ls -d -- !(*[[:digit:]])[[:digit:]].txt

あなたは上で一致させたい場合a1.txt 2.txtではなく、a12.txt12.txt

ただし、kshとbash(failglobzshに似た動作をするオプションを設定しない限り)では、そのパターンがどのファイルとも一致しない場合、パターンは文字通りに渡されls、その(奇妙な名前の)ファイルが存在する場合、lsパターン自体に一致しない場合でもリストされます。

含めるには.2.txt、セットdotglob内のオプションbashの追加、(D)グロブで修飾子zsh、またはセットをFIGNOREする!(.|..)中をksh93

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.