2011-01-25 22 views
38

-rwxまたはdrwxで始まり、任意の数で終了する行に対してgrepを実行するファイルがあります。行の先頭と末尾のGrep?

私はこれを持っていますが、それはかなり正しくありません。何か案は?

grep [^.rwx]*[0-9] usrLog.txt 

答えて

39

トリッキーな部分は、文字クラスの有効な文字の1つとしてダッシュを含む正規表現です。ダッシュは、(通常の)文字クラスの開始直後に、ネゲートされた文字クラスのキャレットの直後に来なければなりません。閉じた角括弧も必要な場合は、閉じた角括弧とそれに続くダッシュが必要です。慈悲深く、ダッシュだけが必要なので、その表記を選択します。

grep '^[-d]rwx.*[0-9]$' "[email protected]" 

参照:Regular ExpressionsとPOSIX標準の詳細についてはgrep

+2

または 'grep -x '[-d] rwx。* [0-9]''。 – ephemient

+0

Linuxの場合、yesまたはGNU grepが使用されます。私が引用したバージョンは、すべてのUnix版で動作します。 –

+2

'-x'はPOSIXです。ダッシュに続くブラケット:[[[ - 。] [。]。]] '(' [] - ] 'より読みにくい)私はこれもPOSIXであると信じています。 – ephemient

3

あなたはおそらくegrepが必要です。試してみてください:

egrep '^[d-]rwx.*[0-9]$' usrLog.txt 
15

をそれはあなたが正しい軌道に乗っていたように... ^文字が行頭にマッチし、$試合が終わりの行になります。ジョナサンのパターンはあなたのために働く...ちょうどあなたの後ろに説明を与えたい

+3

しかし、まったく正しいトラックにはない。 '[]'文字クラスの中の文字は、正規表現の他の部分とは大きく異なっていることに注意することは重要です。 – ephemient

1

あなたは出力を解析するのはls -lですか?

にいます、そしてあなただけusrLog.txtは何か/他の誰かによって作成されるので、あなたは選択の余地を持っていない、あなたは絶対にこのファイル、その他のオプションを使用する必要がある場合は、ファイル名

find . -iname "*[0-9]" 

を取得したい場合

awk '/^[-d].*[0-9]$/' file 

ルビーを含む(1.9+)

ruby -ne 'print if /^[-d].*[0-9]$/' file 

バッシュ

4

キャレット(^)は角括弧内で異なる動作をするだけでなく、角括弧の外側に置くこととは逆の結果になります。キャレットを置いた場所に置くと、カッコ内に置かれた内容で始まらないすべての文字列が検索されます。また、大括弧の間にアスタリスクの前にgrepのようにピリオドを置くこともできます。また、ワイルドカードとしても機能します。

grep ^[.rwx].*[0-9]$ 

これはあなたのために働く必要があり、私はいくつかのポスターが同様に有効な方法である彼らの表現の文字クラスを使用していることに気づいたが、私は1を取得しようとしていますので、あなたは、元の式のいずれかを使用していませんでしたできるだけあなたのものに近いところで、それがよりよく理解されるように途中のあらゆる小さな変化を説明します。どうやって違う方法で学ぶことができます

関連する問題