私はこのファイルを持っています
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
しかし、何も表示しないでください。
bash拡張パターンマッチングを使用します:
shopt -s extglob
ls file+([0-9]).txt
1から3の間の数字を見つけるには
ls file[0-9]?([0-9])?([0-9]).txt
lsで行っているのはグロブであり、正規表現ではありません。正規表現に基づいてファイルを検索するには、findを使用する必要があります。
find ./ -regex '.*/file[[:digit:]]\{1,3\}\.txt'
これは、すべてのサブディレクトリに再帰します。これを防ぐには、-maxdepthを使用できます。
find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt'
ファイルがすべてそのディレクトリに関連している場合(つまり、無関係なファイルがない場合)、次の組み込みオプションを使用できますls
。
ls -l --hide="*extra*"
救助へのGrep:
ls file*.txt |grep -v extra
質問を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.
られます。.