2012-05-11 8 views
1

私は.extraせずにファイルを表示することができますどのように、これはバッシュ正規表現:0〜3の数字

file00.txt 
file01.txt 
... 
file99.txt 
file102.txt 
file102.txt 

とbashで

file00.extra.txt 
file01.extra.txt 
... 

正規表現で(LS)ファイルがありますか?

私は

ls file[0-9]\{1,3\}.txt 

と試みるが、何も表示されません。救助へ

+0

見出しがテキストと一致しません。 0-3の番号を検索しますか、「余分な」を除外しますか?名前から「余分な」ファイルを削除するか、ファイルをリストから隠すかしますか?この宿題ですか?私はレッスンですか? –

答えて

6

使用bash extended pattern matching

shopt -s extglob 
ls file+([0-9]).txt 

1〜3の数字

ls file[0-9]?([0-9])?([0-9]).txt 
+0

私は答えを打ち込んでいるので、extglobについて考えました。あなたは私にそれを打つ。 – jordanm

+0

'ls'の' hide'オプションを使う方法はありますか?私は働く事例を得ることができません。おそらく私は "パターン"を指定する方法を知らないので。誰でも? – Marc

+0

'shopt -u extglob'でdisble extglob @ – JuanPablo

1

をGrep:質問を3回再読み込みした後

ls file*.txt |grep -v extra 
+0

私は似たような解決策で、おそらく 'sed'を使うと思いますが、正規表現を使う必要があります – JuanPablo

+0

JuanPablo - なぜ正規表現を使う必要がありますか?問題は、述べられていることや宿題とは異なるのですか? – jordanm

1

、とgrepを使用フランク・シュミット、(悪のツール)の答えにコメント、私は印象を持ってそれが宿題です/ ls-lesson。

その後、私は完全に別の答えを持っている:

for f in file* ; do echo $f; done 
file00.extra.txt 
file00.txt 
file01.extra.txt 
file01.txt 
file102.txt 
file99.txt 

表示を.extraなし:

ls --hide="*.extra*" 

私の第一印象は、我々は、このソリューションでは、ファイル名から「余分」を削除するものとし、でした。:

for f in file* ; do echo ${f/.extra./.}; done 
file00.txt 
file00.txt 
file01.txt 
file01.txt 
file102.txt 
file99.txt 

${f/.extra./.}がを置き換えますと.(ドット)。

+0

".extra"を持たないファイルは見つからず、ファイル名から削除されます。 – jordanm

+0

私は誰がJuanの権利を理解したのか分かりません。私は、ファイル名に「余分」が含まれていても、「余分な」ものがなくても、ファイル名を表示したいと思っていました。しかし、あなたが正しいかもしれない。あなたの解釈はおそらくもっと意味があります。 –

+0

私はそれが何を意味しているかはかなり確信していますが、「エクストラなしでファイルを表示する方法」はちょっと混乱するかもしれません。 – jordanm

3

あなたがlsでやっていることは、正規表現ではなくグロブです。正規表現に基づいてファイルを見つけるには、findを使う必要があります。

find ./ -regex '.*/file[[:digit:]]\{1,3\}\.txt' 

これはすべてのサブディレクトリに繰り返されます。これを防ぐには、-maxdepthを使用します。

find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt' 
1

を見つけるためにあなたのファイルは、そのディレクトリ(つまり、無関係なファイル)に関連するすべてのある場合は、使用することができます組み込みオプションls

ls -l --hide="*extra*"