2

私はこのファイルを持っています

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

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

正規表現を使用したbash(ls)で、ファイルなしでファイルを表示するにはどうすればよい.extraですか?

でやってみます

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

しかし、何も表示しないでください。

4

5 に答える 5

6

bash拡張パターンマッチングを使用します:

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

1から3の間の数字を見つけるには

ls file[0-9]?([0-9])?([0-9]).txt
于 2012-05-11T14:28:21.163 に答える
3

lsで行っているのはグロブであり、正規表現ではありません。正規表現に基づいてファイルを検索するには、findを使用する必要があります。

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

これは、すべてのサブディレクトリに再帰します。これを防ぐには、-maxdepthを使用できます。

find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt'
于 2012-05-11T14:27:56.520 に答える
1

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

ls -l --hide="*extra*"
于 2012-05-11T14:49:33.167 に答える
1

救助へのGrep:

ls file*.txt |grep -v extra
于 2012-05-11T14:25:47.023 に答える
1

質問を3回読み直し、grep(悪の道具)を使ったフランク・シュミットの答えへのコメントを読んだところ、宿題/ls-lessonのような印象を受けました。

それから私は完全に異なる答えを持っています:

ls --hide="*.extra*"

私の第一印象は、この解決策でファイル名から「extra」を削除するということでした。

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

.extra。なしで表示:

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

文字列の置換は(ドット)に${f/.extra./.}置き換え.extra.られます。.

于 2012-05-11T14:27:45.820 に答える