在shell脚本语言中,我必须从给定文件中提取仅以IP地址开头的行
示例fileX包含:
text
10.0.0.1 host1
some other text 10.1.1.2
172.22.0.25 host1 host1.example.com
12.8
123 T
260.1.1.1
预期产出:
10.0.0.1 host1
172.22.0.25 host1 host1.example.com
答案 0 :(得分:2)
假设有效的IP地址'八位字节的范围从0到255(某些IP号码受到保护,但我没有解决这些问题),此代码应该按照您的要求执行:
grep -Eh '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /folder/file | awk -F'.' '$1 <=255 && $2 <= 255 && $3 <= 255 && $4 <= 255' > /tmp/result
结果存储在/ tmp / result
中答案 1 :(得分:1)
使用perl
$ perl -lane 'if($F[0] =~ /^(\d+\.){3}\d+$/){ $m=1; foreach (split/\./,$F[0]){$m=0 if $_ > 255} print if $m }' fileX
10.0.0.1 host1
172.22.0.25 host1 host1.example.com
@F
数组if($F[0] =~ /^(\d+\.){3}\d+$/)
检查第一个字段是否有四组由.
分隔的数字
$m=1
初始化匹配变量foreach (split/\./,$F[0])
拆分.
上的第一个字段并对其进行迭代$m=0 if $_ > 255
清除匹配变量,如果任何值大于255 print if $m
打印输入行