我需要从日志中获取IP,我需要grep true-client,然后我需要grep true-client-ip=[191.168.171.15]
并仅获取IP
2019.02.14-08:26:06:713,asd:1234:chan,0.000,asd,S,request-begin-site,POST,{remoteHost=1.2.3.4,remoteAddr=1.2.3.4,requestType=POST,serverName=api=[text/html],accept-charset=[iso-12345-15, utf-8;q=0.5, *;q=0.5],accept-encoding=[gzip],server-origin=[5],cache-control=[no-cache, max-age=0],pragma=[no-cache],program-header=[true],te=[chunked;q=1.0],true-client-ip=[191.168.171.15],true-host=[www.server.com]
我正在尝试grep -o "true-client-ip=[^ ]*,"
,但它带来了我:
true-client-ip=[191.168.171.15],true-host=[www.server.com]
我只需要true-client-ip=[191.168.171.15]
,这样我就可以减少获得true-client-ip=[191.168.171.15] | cut -d= -f2
之类的IP了
答案 0 :(得分:1)
使用grep
-P
标志(如果可用):
grep -oP 'true-client-ip=\[\K[^]]*'
Perl的\K
元字符在显示结果时会丢弃前面的内容,因此它将与“ true-client-ip = [”部分匹配,但仅显示IP。
如果grep -P
不可用,我将使用sed
:
sed -nE 's/.*true-client-ip=\[([^]]*).*/\1/p'
答案 1 :(得分:1)
如果您有GNU grep,则可以这样操作:
$ grep -oP "(?<=true-client-ip=\[)[^\]]*" file
191.168.171.15
(?<=)
被称为“积极向后看”,您可以找到相关的doc here。
\
中的反斜杠[^\]]
实际上是不必要的,我只是想添加它以使其更直观,更不容易引起误解:-)。