从文件中提取以IP地址开头的行

时间:2016-11-24 15:23:29

标签: regex bash shell sed grep

在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

2 个答案:

答案 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
    • 如果第一个字段中的所有值小于或等于255 ,则
    • print if $m打印输入行