
コマンドライン全体で括弧内に表示される数字のみを検索する必要があります。
たとえば、
$ 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
意味がありません。grep
grep exa.lg
答え4
cat input | grep ".=" > output
または
cat input | grep "errno" > output
あなたはします:
02:57:25 BROKER : Unable to open errno =. (1295)
ただし、これらのすべての種類の行に「errno」や「=」などの一意の識別子があることを確認する必要があります(つまり、他の行にはこれらの単語/記号がありません)。