我试着弄清楚如何在linux中只使用以下日志中的“SIG:”哈希部分:
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
答案 0 :(得分:3)
使用Perl正则表达式(适用于GNU grep):
grep -oP '(?<=SIG:<)[^>]*(?=>)'
答案 1 :(得分:2)
grep
一个人在这里帮助不了多少。您可以将cut
添加到工具箱中:
grep -o 'SIG:<[^>]\+' | cut -f2 -d\<
首先,选择SIG及其后的所有内容,直至>
。然后,只返回第一个<
之后的内容。
答案 2 :(得分:1)
sed 's/.*SIG:<\([^>]\+\)>.*/\1/g' INPUTFILE
可能会为你工作
答案 3 :(得分:1)
awk '{for(i=1;i<=NF;i++)if($i~/SIG:/){gsub("SIG:<","",$i);gsub(">","",$i);print $i;break}}' your_file
答案 4 :(得分:1)
使用两个greps,一个用于抓取正确的字段,另一个用于清理:
<infile grep -o 'SIG:<[^>]*' | grep -o '[^<]*$'