首页 > 解决方案 > 如何从ip中提取前2个数字

问题描述

我有文字:

1.1.1.1
12.123.1.1
123.123.1.1
213.12.123.1
34.12.123
1.123.4.1

我怎样才能提取看起来像:

1.1
12.123
123.123
213.12
34.12
1.123

标签: linuxawksed

解决方案


使用awk它就像使用'.'(eg awk -F.) 的字段分隔符并打印由 a 分隔的前两个字段一样简单,'.'这可以通过printf或通过设置来完成OFS=.,例如:

awk -F. '{printf "%d.%d\n", $1, $2}' file

或者

awk -F. -v OFS=. '{print $1, $2}' file

示例使用/输出

随着您的输入file,例如

$ awk -F. -v OFS=. '{print $1, $2}' file
1.1
12.123
123.123
213.12
34.12
1.123

使用sed

你可以很容易地处理这个问题sed,例如:

$ sed -r 's/([0-9]+[.][0-9]+).*$/\1/' file
1.1
12.123
123.123
213.12
34.12
1.123

您只需使用扩展的正则表达式来捕获第一组数字(八位字节)点和第二个八位字节,然后将该信息重新插入作为反向引用。

如果由于某种原因您仅限于基本的正则表达式,那么您可以使用:

sed 's/\([0-9][0-9]*[.][0-9][0-9]*\).*$/\1/' file

结果相同。如果您还有其他问题,请仔细查看并告诉我。


推荐阅读