私は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*
はで始まらないs
がm
。
m
ただし、最初の文字のみを含むファイル名は見つかりません。
m
またはで始まらないが、s
を含むファイルm
と、で始まるファイルをそれぞれ見つけてこれを行うことができますm
。メンテナンスが少し面倒でコードを読んでも、それが何をしているのかすぐにはわかりません。
$ printf '%s\n' [!ms]*m* m*
enormous
much
またはfind
読みやすいIMHOを使用してください。
$ find . -maxdepth 1 -name '[!s]*' -name '*m*'
./enormous
./much