以正则表达式(IP地址)开头的awk打印行

时间:2016-09-03 11:27:49

标签: linux bash shell awk sed

我试图读取第一列上有IP地址的那些行的文件。

我的命令下面没有返回任何值。

cat test.csv | awk '$1 == "^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}]" { print $0 }'

正则表达式可以捕获IP地址。

也尝试过以下,

cat test_1.csv | awk '$1~/^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\]/ {print $0}'

test.csv

1.1.1.1 ipaddress gateway
2.2.2.2 ipaddress_2 firewall
www.google.com domain google

2 个答案:

答案 0 :(得分:3)

您可以使用grep

更轻松地完成此操作
grep -P '^\d+(\.\d+){3}\s' test.csv

grep -P '^\d{1,3}(\.\d{1,3}){3}\s' test.csv

答案 1 :(得分:0)

在GNU {1,3}中使用awk(区间表达式)时,您必须使用--re-interval(或)--posix选项启用它。

使用:

awk --posix '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file

(OR)

awk --re-interval '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file

来自man awk

  

环R {N,M}

     

大括号内的一个或两个数字表示区间表达式。   区间表达式仅在 - posix 或时才可用   在命令行中指定了 - re-interval