13

重複の可能性:
unix/linux シェルでパターン マッチングを行う場合、逆または負のワイルドカードを使用するにはどうすればよいですか?

manのページを読みましたが、ファイル セレクターに一致しないものlsをすべて一覧表示するオプションが見つかりません。この操作を実行する方法を知っていますか?

例:私のディレクトリがこれだとしましょう:

> ls
a.txt b.mkv c.txt d.mp3 e.flv

今、私は次のことをしたいと思います

> ls -[SOME_OPTION] *.txt
b.mkv d.mp3 e.flv

そのようなオプションはありますか?

lsそうでない場合、出力を別の関数 (おそらく)にパイプして、sed必要なものだけを表示する方法はありますか?

これを行う方法が正確にはわかりませんが、次のようなものになると想像しています。

> ls | sed [SOMETHING] 

sedawk、およびの使用方法を学ぶ必要がありgrepますが、正規表現の書き方を理解するのに行き詰まっています。正規表現の概念ははっきりと理解していますが、異なる構文を使用する正規表現の間で混乱します。

どんな助けでも大歓迎です!

編集:

私は Mac OS X を実行していることを忘れていたので、関数は unix/linux シェルの他の回答で説明されているものとは少し異なる場合があります (したがってsed、 、awk、および との混乱の一部grep)。

4

5 に答える 5

52

これはあなたを助けるかもしれません

ls --ignore=*.txt

ディレクトリ内の .txt ファイルは表示されません。

于 2012-09-29T04:49:08.257 に答える
19

多分このコマンドはあなたを助けるでしょう

find ./ -maxdepth 1 ! -path "*txt"
于 2012-09-28T05:31:10.347 に答える
14
ls|grep -v ".txt"

これは役に立ちますか?

于 2012-09-28T05:25:03.230 に答える
6

lsは、提示される引数をリストするだけです。lsが表示する前*.txtに展開されます。試してください。a.txt c.txtecho *.txt

sedで要求したことを実行するには、入力からパターンを削除します。次に例を示します。

ls | sed '/\.txt$/d'

で終わるすべての行を削除し.txtます。

bashzshを使用すると、シェルに逆展開を実行させることができます。bashを使用すると、次のようになります。

ls !(*.txt)

zsh:

ls *~*.txt

shopt -s extglob両方のシェルで、bashzshsetopt extendedglobを使用して拡張globオプションを有効にする必要があることに注意してください。

于 2012-09-28T07:34:21.140 に答える
4

を使用した片道find

find . -maxdepth 1 -type f -not -name "*.txt" -printf "%f\n"
于 2012-09-28T05:31:07.790 に答える