角かっこ内の値を取得する方法

角かっこ内の値を取得する方法

コマンドライン全体で括弧内に表示される数字のみを検索する必要があります。

たとえば、

$ cat exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open (45)
02:57:25 BROKER  1: Unable to open 999. (13)
02:57:25 BROKER  : Unable to open 1295, (1098)

1295コマンドライン(BROKER : Unable to open 1295)ではなく、括弧内のエラー番号情報を取得する必要があります。

私はこれを試しました:

cat exa.lg | awk -F '[)(]' '{print $2}' | grep -E '1295|13' exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. (13)
02:57:25 BROKER  : Unable to open 1295, (1098)

1295しかし、2つの数字(含まれている数字)が得られました02:57:25 BROKER : Unable to open 1295

私はただ持って行きたいです02:57:25 BROKER : Unable to open errno =. (1295)

どうすればいいですか?

答え1

正規表現に括弧を含めます。正規表現で特別な意味を持つので、エスケープする必要があります。

grep -E '\((1295|13)\)' exa.lg

答え2

シンプルアッ解決策:

awk '/\((1295|13)\)/{ print }' exa.lg

出力:

02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. (13)

  • /\((1295|13)\)/- 記録(1295)または(13)記録内の内容を一致させます。 (でも表現可能/(1295)|(13)/

答え3

括弧内に、13またはを含むすべての行を印刷するとします。1295その場合は、次のことができます。

$ grep -E '\(1295|13\)' exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. 

catどちらもファイル名を入力として使用できるawkため、元のコマンドは必要ありません。grepまた、ジョブはawkの出力ではなくファイル()で実行されるため、ジョブはawk意味がありません。grepgrep exa.lg

答え4

cat input | grep ".=" > output

または

cat input | grep "errno" > output

あなたはします:

02:57:25 BROKER  : Unable to open errno =. (1295)  


ただし、これらのすべての種類の行に「errno」や「=」などの一意の識別子があることを確認する必要があります(つまり、他の行にはこれらの単語/記号がありません)。

関連情報