1

以下のログから、Linuxで「SIG:」ハッシュ部分のみをgrepする方法を理解しようとしています。

20120927:10:57:23|89252871|3342|ESP individual score details for Message ID: <esp:msgid> -|<RBL:<0>  SHA:<0>  SHA_FLAGS:<0>  UHA:<12>  ISC:<0>  BAYES:<0>  SenderID:<0>  DKIM:<0>  TS:<-1>  SIG:<309875857436-4372-986476-327698-7436-984376-43276-98437643-8276-84327-6743-6874-986-86743-86732-867432-687432-687>  DSC:<0>  ('TRU_spam1', 47):<0> ('TRU_legal_spam', 31):<0> ('TRU_marketing_spam', 34):<0> ('TRU_profanity_spam', 39):<0> ('TRU_medical_spam', 35):<0> ('TRU_playsites', 46):<0> ('TRU_money_spam', 37):<0> ('TRU_stock_spam', 41):<0> ('TRU_embedded_image_spam', 27):<0> ('TRU_urllinks', 49):<0> ('TRU_watch_spam', 42):<0> ('TRU_phish_spam', 38):<0> ('TRU_spam2', 48):<0> ('TRU_misc_spam', 36):<0> ('TRU_LOREAL', 55):<0> ('TRU_freehosting', 45):<0> ('TRU_lotto_spam', 32):<0> ('TRU_ru_spamsubj', 56):<0> ('TRU_adult_spam', 18):<0> ('URL Real-Time Signatures', 9):<0> ('TRU_scam_spam', 40):<0>:89252871>|

最終ビュー:

309875857436-4372-986476-327698-7436-984376-43276-98437643-8276-84327-6743-6874-986-86743-86732-867432-687432-687
4

5 に答える 5

3

Perl正規表現を使用する場合(GNU grepで動作します):

grep -oP '(?<=SIG:<)[^>]*(?=>)'
于 2012-10-03T10:20:26.030 に答える
2

grep一人でここであなたを大いに助けることはできません。ツールボックスに追加できcutます。

grep -o 'SIG:<[^>]\+' | cut -f2 -d\<

まず、SIGとそれに続くすべてを選択します>。次に、最初のの後にあるものだけを返し<ます。

于 2012-10-03T10:17:36.863 に答える
1

2つのグリップを使用します。1つは右翼をつかむためのもので、もう1つはクリーンアップするためのものです。

<infile grep -o 'SIG:<[^>]*' | grep -o '[^<]*$'
于 2012-10-03T11:57:48.020 に答える
1
sed 's/.*SIG:<\([^>]\+\)>.*/\1/g' INPUTFILE

あなたのために働くかもしれません

于 2012-10-03T10:16:22.647 に答える
1
awk '{for(i=1;i<=NF;i++)if($i~/SIG:/){gsub("SIG:<","",$i);gsub(">","",$i);print $i;break}}' your_file
于 2012-10-03T10:23:23.837 に答える