2012-11-20 97 views
1

我正在清理一組ipv6 ip地址。gnu cut刪除所有內容:

cat /tmp/ipaddress.txt | /bin/grep -i "unexpectedly shrunk window" | /bin/cut -d' ' -f3 | /bin/cut -d'/' -f1 | /bin/cut -d' ' -f3 | /bin/sort --uniq > /var/log/dos_ip6.txt 

/tmp/ipaddress.txt包含以下

TCP: Peer 0000:0000:0000:0000:0000:ffff:4df6:3e12:12345/80 unexpectedly shrunk window 1550831482:1550831483 (repaired) 

/var/log/dos_ip6.txt包含以下

0000:0000:0000:0000:0000:ffff:4df6:3e12:12345 

我想砍最後一個「* :12345「。

我怎樣才能做到這一點

回答

1

如果您使用兩個或多個cut命令的思維,或許可以考慮使用awk

awk 'BEGIN { IGNORECASE=1 } { print gensub(/(.*):.*/, "\\1", "g", $3) | "sort -u" }' /tmp/ipaddress.txt 

結果:

0000:0000:0000:0000:0000:ffff:4df6:3e12 

否則,到sed的簡單管道應該就足夠了:

... | sed 's/\(.*\):.*/\1/' 
+0

完美。這正是我正在尋找的。謝謝您的幫助 – rezizter

0

我知道這是一個很老的文章,但如果我們想做到這一點單獨使用cut,我們可以做這樣的事情:

echo "TCP: Peer 0000:0000:0000:0000:0000:ffff:4df6:3e12:12345/80 unexpectedly shrunk window 1550831482:1550831483 (repaired)"| cut -d" " -f3| cut -d":" -f1-8 

這將導致:

0000:0000:0000:0000:0000:ffff:4df6:3e12