Linuxで特定の正規表現に一致する行を表示する


-1

ログファイルでその表記を使用します。

[何か]

何かが必要で、可変長の文字と数字。私の特別なログファイルには、上記の文字が含まれる行が含まれています。すなわち

Line 1: DEBUG [AS-kmksdf] Error occured!
Line 2: something somethingg..

1行目を取得したい。ログファイルが動的に大きくなり、画面に次のように表示されます。

tail -f log.txt

特別な行だけを表示するにはどうすればよいですか?

私はgrepを使用し、正規表現はsthになることを知っています。好む

[[A-Z]*-[A-Z]*]

それらをそのコマンドと組み合わせる方法。これは機能しません:

tail -f log.txt | grep [[A-Z]*-[A-Z]*]

windows7でcygwinを使用し、cmd.exeでいくつかのLinuxコマンドを実行できます。


見てくださいgrep
soandos

あなたの編集はこれを完全に異なる質問にしたが、それでもあなたが実際に望むものを正確に説明していない。経験のあるなし、開発者は、このような「要件」...に向けて努力して喜んではありません
DevSolar

回答:


2

正規表現にはいくつかの問題があります。

  • まず第一に、Perl Compatible Regular Expressions-Pを有効にするスイッチを常に使用することをお勧めします。

    デフォルトでgrepは、基本的な正規表現を使用します。これは、広く使用されておらず、一貫性のない間隔に悩まされています。

  • であるため[A-Z]、括弧は正規表現で特別な意味を持ちます。PCREでリテラルブラケットを使用するには、バックスラッシュでエスケープします:\[または\]

  • -iスイッチを設定しない限り、正規表現では大文字と小文字が区別されます。

  • *()を含む、任意の数のオカレンスを意味します0+代わりに使用することもできます(正の数のオカレンス)。

  • 正規表現は常に二重引用符で囲みます。そうしないと、bashによって文字が展開されます。

その結果、次のコマンドが機能します。

tail -f log.txt | grep -Pi "\[[A-Z]+-[A-Z]+\]"

質問を編集しました。私は別の問題に気付きました。
kamaci

1
@kamaci:編集にはまったく異なるアプローチが必要なので、まったく別の質問です。編集する代わりに、新しい質問をすることをお勧めします。
デニス

grepコマンドに-Pオプションがありません。たぶんcygwinが原因です。
kamaci

これはおそらくバグです。pcregrep@crizotのアプローチをインストールするか使用することができます。
デニス

1
私は私の質問をロールバックしているし、新しい質問は次のとおりです。superuser.com/questions/439249/...
kamaci

1
tail -f log.txt |grep -E '\[[a-zA-Z]*-[a-zA-Z]*\]'

Regexpalを使用して、正規表現をテストできます。また、あなたは使うべき-Egrep。この場合は必須ではなく、必須ではありませんが、拡張正規表現を使用できます。


再帰的?どうして?
DevSolar

ソリー。答えを編集します-E。必須ではありませんが、通常は-E拡張正規表現を使用するため、規則として使用します。この場合、それは必要ありません。
fmanco

それはすばらしい。14:のように、行がnumber、number、および:で始まるまで、その特別な行ですべての行を開始するのはどうですか。
kamaci

あなたは正しいデニスです。答えを修正しました。おかげで
fmanco

@Kamaci正規表現だけではあなたが望むものが可能だとは思いません。Bisonのようなものが必要になります。
fmanco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.