web-dev-qa-db-ja.com

行頭と行末のGrep?

-rwxまたはdrwxで始まり、任意の数で終わる行をgrepするファイルがあります。

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

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

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

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

POSIX標準の詳細については、 正規表現 および grep を参照してください。

55

あなたは正しい軌道に乗っているように見えます... ^文字は行頭と一致し、$文字は行末と一致します。ジョナサンのパターンはあなたのために働くでしょう...ただあなたにその背後にある説明をしたかったです

26
Ray

キャレット(^)が角かっこ内で異なる動作をするだけでなく、角カッコの外側に配置すると逆の結果になることに注意してください。キャレットを配置すると、括弧内に配置したコンテンツで始まらないすべての文字列が検索されます。また、アスタリスクの前にピリオドをブラケットの間に配置することもできます。これは、grepと同様に、「ワイルドカード」としても機能します。

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

これはあなたのために働くはずです、私はいくつかのポスターが同様に効果的な方法である彼らの表現でキャラクタークラスを使用していることに気づきました少しずつ変更が加えられるため、理解が深まります。そうでなければ、どうやって学ぶことができますか?

5
Bria

おそらくegrepが必要でしょう。試してください:

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

ls -lの出力を解析していますか?

あなたが、あなたがファイル名を取得したいだけなら

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

UsrLog.txtが何か/他の人によって作成され、絶対にこのファイルを使用する必要があるため選択の余地がない場合、他のオプションには以下が含まれます。

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

ルビー(1.9+)

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

Bash

while read -r line ; do  case $line in [-d]*[0-9] ) echo $line;  esac; done < file
1
kurumi