グループ grep コマンド

グループ grep コマンド

私はgrepから始めsて含めたくありませんm

私は効果的なこのソリューションを試しました。

ls | grep -Ev "^s" | grep "m"

grepただし、単一のコマンドでこれを実行しようとすると失敗します。

ls | grep -E '^[^s]*m*'

理由を説明できません。 1つのコマンドで実行できますかgrep

ベストアンサー1

これは必要ありませんgrep

printf '%s\n' [!s]*m*

テスト:

$ touch small big larger enormous much
$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct 24 13:20 big
-rw-r--r--  1 kk  wheel  0 Oct 24 13:20 enormous
-rw-r--r--  1 kk  wheel  0 Oct 24 13:20 larger
-rw-r--r--  1 kk  wheel  0 Oct 24 13:20 much
-rw-r--r--  1 kk  wheel  0 Oct 24 13:20 small
$ printf '%s\n' [!s]*m*
enormous

ファイル名ワイルドカードパターン[!s]*m*はで始まらないsm

mただし、最初の文字のみを含むファイル名は見つかりません。

mまたはで始まらないが、sを含むファイルmと、で始まるファイルをそれぞれ見つけてこれを行うことができますm。メンテナンスが少し面倒でコードを読んでも、それが何をしているのかすぐにはわかりません。

$ printf '%s\n' [!ms]*m* m*
enormous
much

またはfind読みやすいIMHOを使用してください。

$ find . -maxdepth 1 -name '[!s]*' -name '*m*'
./enormous
./much

おすすめ記事