我有一个以逗号分隔的列表,格式相当简单:
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 cut
from coreutils
(自从您用 标记问题以来我对此表示怀疑linux
),因此您错过了该--output-delimiter = -
选项:
sed 's/^\([^,]*\),([^,]*).*/\1-\2/' file
答案2
awk -F "," 'BEGIN{OFS="-"}{print $1,$2}' File
输出
IPrangestart-IPrangeend