本帖最后由 liuyuhui_gdtyj 于 2018-07-01 10:05 编辑
一份文件,内容杂七杂八,包含合法与不合法的ip,一行中可能没有ip,也可能有多个ip,现在要用grep\awk\sed三种方法实现把其中合法的IP都列出来。我用grep和awk已实现,用sed实现不了,求各位高人指点~
grep -E -o "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" filename
awk '{for(i=1;i<=NF;i++){if(match($i,/((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/)>0){print substr($i,RSTART,RLENGTH)}}}' filename
sed -nr 's/.*\<(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]|[0-9]).*$/\1.\2.\3.\4/p' filename
这个sed只会找到一行中最后一组ip,怎么找出一行中所有ip呢?
|