如何格式化这个IP列表?

如何格式化这个IP列表?

我有一个以逗号分隔的列表,格式相当简单:

IPrangestart,IPrangeend,int number,date (delimited by slashes),Name (is dirty, contains spaces, dots, dashes, quotemarks etc)

前三列不能为空。我想将其转换为标准防火墙阻止可行格式,表示由破折号分隔的随机数:

IPrangestart-IPrangend

有时字段是空的。对数千行执行此操作的最快、最智能的方法是什么?我尝试了正则表达式,例如每个字母的 [A-Za-z] 和每个数字的 [0-9],但这并不能解决随机 " . 和上面指定的类似内容的问题...

我尝试了这个正则表达式,但我不知道如何让它识别之间的破折号(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

答案1

如果与 ip 相关的列始终存在(根据您的评论),请使用cut保留前两个逗号分隔的列,并替换,-

cut -d, -f1,2 --output-delimiter=-

如果由于某种原因,您无法访问GNU cutfrom coreutils(自从您用 标记问题以来我对此表示怀疑linux),因此您错过了该--output-delimiter = -选项:

sed 's/^\([^,]*\),([^,]*).*/\1-\2/' file

答案2

awk -F "," 'BEGIN{OFS="-"}{print $1,$2}' File

输出

IPrangestart-IPrangeend

相关内容