我将以下内容作为输出
2017-04-10 12:23:00.307411 IP 124.108.16.209.443 > 192.168.180.3.44526: tcp 1209
2017-04-10 12:23:00.836184 IP 192.168.180.3.43095 > www.facebook.com.443: tcp 303
2017-04-10 12:23:09.948709 IP www.facebook.com.443 > 192.168.180.3.47172: tcp 38
2017-04-10 12:23:09.986789 IP 192.168.180.31.47172 > www.facebook.com.443: tcp 0
我想要这样的输出,
2017-04-10 12:23:00 IP 192.168.180.3 > www.facebook.com
2017-04-10 12:23:09 IP 192.168.180.31 > www.facebook.com
并且重要的是要删除以 IP 字后的字母开头的行,并删除那些在 IP 字后不以192.168.180开头的行,基本上是从上面例如我只想要第2行和第4行作为输出。
答案 0 :(得分:1)
删除 IP 字后以字母开头的行 在 IP 字
之后删除不以 192.168.180 开头的那一行
awk 方法:
awk '$4!~/^[[:alpha:]]/ && $4~/^192\.168\.180/' file
space是 awk 中的默认字段分隔符。
$4!~/^[[:alpha:]]/
:
$4
- 第四场
!~
- 不匹配
/^[[:alpha:]]/
- 正则表达式,表示“以字母字符开头”
&&
- 布尔“和”运算符。
boolean1&& boolean2 - 如果 boolean1 和 boolean2 都为真,则为真。
$4~/^192\.168\.180/
- 如果第四个字段以192.168.180
其他方法:
要剥离某些列的不需要的部分,请使用以下方法:
awk -v p=".[^.]+$" '$4!~/^[[:alpha:]]/ && $4~/^192\.168\.180/
{$7=$8="";for(i=2;i<=6;i+=2)gsub(p,"",$i);print}' file
输出:
2017-04-10 12:23:00 IP 192.168.180.3 > www.facebook.com
2017-04-10 12:23:09 IP 192.168.180.31 > www.facebook.com
答案 1 :(得分:1)
我想 - 删除在IP字后以字母开头的行,意味着(基本上)与保持以数字开头的行相同的东西
删除在IP字之后不以192.168.180开头的行,意味着保留其中包含IP 192.168.180
的行,并且基本上使第一个要求过时。 man grep
:
DESCRIPTION
grep searches the named input FILEs for lines containing a match to the
given PATTERN. - - By default, grep prints the matching lines.
尝试:
grep "IP 192.168.180" file
2017-04-10 12:23:00.836184 IP 192.168.180.3.43095 > www.facebook.com.443: tcp 303
2017-04-10 12:23:09.986789 IP 192.168.180.31.47172 > www.facebook.com.443: tcp 0
答案 2 :(得分:0)
你可以试试这样的东西,它只是语法:
sed -e '/pattern here/ { N; d; }'
N和d是您可以使用的命令。
在模式之后删除1行(包括带有模式的行):
patter =你的字符串
sed -e '/pattern/,+1d' file.txt