2016-11-23 3 views
0

grepコマンドに問題があります。 私は3つのタスクを持っている:lsの結果をフィルタリングするにはどのようにgrepできますか?

A)を見つけると

ls | grep ^[0-9] 

があまりにもなく、作品の "ls -l"

ls -l | grep ^d # which works good 

B)のみのファイル名が数字で始まっているための唯一のディレクトリのを示し、ファイルとディレクトリについては、ファイルに対してのみ動作する必要があります。どうすればいいですか?グループIは、Bのためにこれらのコマンドを作ることができますどのように

ls -l | grep "^-*x" # it shows every file 

のための "x" の権利を)持っていると、c)作品

C)ファイル?

+5

ためls'は、このために悪い考えです。 'find'コマンドを使います。 – anubhava

+4

... Wooledge wikiの[ls'の出力を解析しない理由](http://mywiki.wooledge.org/ParsingLs)と[UsingFind](http://mywiki.wooledge。 org/UsingFindを参照してください)。 –

答えて

1

A)を見つけると "LS -l"

find . -maxdepth 1 -mindepth 1 -type d -exec ls -l {} \; 

B)のみのファイル名が数字

find . -maxdepth 1 -type f -name "[0-9]*" 

c)の "X" を持つファイルを開始するための唯一のディレクトリのを示し、右 `解析グループ

find . -maxdepth 1 -type f -perm /g+x 
+1

Heh。私はリテラル主義のアプローチを取ろうとした他の答えがあるのではないかと心配していたので、私は自分自身にしか答えませんでした。どうやら私は心配する必要はありません。それは、現在 '-regex'で実装されているように、(b)は不必要に互換性がなく(findにGNUの拡張が必要です)、数字で始まるディレクトリにあればどんなファイルにもマッチします。 –

+1

@CharlesDuffyが答えを更新しました: – ritesht93

+0

'-ls'アクションを追加すると、' ls -l'と同じ出力が得られます。 –

関連する問題