iT邦幫忙

0

如何取出 ip 值

sed
匿名 2014-08-18 11:40:512799 瀏覽
  • 分享至 

  • xImage

我有一個 log 檔
格式是這樣
ll62-2-210-251-62.ll62.iam.net.ma[62.251.210.2]:
unknown[99.248.181.16]:
unknown[203.170.234.130]:
atic.arcor-ip.net[178.15.23.2]:
business-178-015-023-002.static.arcor-ip.net[178.15.23.2]:
unknown[99.59.103.92]:
unknown[184.81.169.90]:
static-184-81-169-90.dsl.cavtel.net[184.81.169.90]:

在 linux 環境下
如何把他變成這樣
62.251.210.2
99.248.181.16
203.170.234.130
178.15.23.2
99.59.103.92
184.81.169.90

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
16
Ray
iT邦大神 1 級 ‧ 2014-08-18 13:55:57
最佳解答

假設你的 Log 檔名稱是: abc.log, 指令如下:

<pre class="c" name="code">cat abc.log | sed 's/^.*\[//g' | sed 's/\].*$//g'

輸出結果:> 62.251.210.2

99.248.181.16
203.170.234.130
178.15.23.2
178.15.23.2
99.59.103.92
184.81.169.90
184.81.169.90

匿名 檢舉

^ 代表在列的開頭
.* 代表零個或多個任意字元的意思
\ 跳脫字元
^.*\[ 從列的開頭到[
// 空白
sed 's/^.*\[//g'

結果就會變成
99.248.181.16]:

匿名 檢舉

sed 's/\].*$//g'

再把後面含]去掉

輸出結果
99.248.181.16

0
Jesse HO
iT邦好手 1 級 ‧ 2014-08-18 23:08:42

ll62-2-210-251-62.ll62.iam.net.ma[62.251.210.2]:
unknown[99.248.181.16]:
unknown[203.170.234.130]:
atic.arcor-ip.net[178.15.23.2]:
business-...(恕刪)

如果[ 和 ] 是固定格式輸出:

<pre class="c" name="code">cat abc.log | awk -F[ '{print $2}' | awk -F] '{print $1}'
2
wiseguy
iT邦超人 1 級 ‧ 2014-08-19 00:05:50

只需一個指令:

<pre class="c" name="code">egrep -o '[0-9]+(\.[0-9]+){3}' LOG檔

即可。
不過我注意到你輸出最後兩行並沒有重覆的IP,如果還要扣掉重覆的,那就加上 sort:

<pre class="c" name="code">egrep -o '[0-9]+(\.[0-9]+){3}' LOG檔 | sort -u

我要發表回答

立即登入回答