我想让awk打印输入中的所有数字,所以我写了
echo 2 1a 12121 -1212 abc |
awk ' { for (i=1;i<=NF;i++) if ($i ~ /[-.0-9]*/) print $i; } '
我想说的是'字符串由'0-9'组成。' ' - ',但在输出中打印出每个字段,我做错了什么?
答案 0 :(得分:1)
你想这样吗?
echo 2 1a 12121 -1212 abc | awk '{ for (i=1;i<=NF;i++) if ($i ~ /-?[0-9]+\.?[0-9]*$/) print $i; }'
答案 1 :(得分:1)
/[-.0-9]*/
这意味着零个或多个号码,.
或-
由于abc
确实包含上面的零个字符,因此将打印出来。
更改为+
,表示一个或多个:
PS这也会打印一个.
和一个-
echo "2 1a 12121 -1212 abc . more - hey 45.62" | awk '{for (i=1;i<=NF;i++) if ($i~/[0-9.-]+/) print $i}'
2
1a
12121
-1212
.
-
45.62
所以我会用这样的东西来打印数字:
echo "2 1a 12121 -1212 abc . more - hey 45.62" | awk '{for (i=1;i<=NF;i++) if ($i~/^-?[0-9]+\.?[0-9]*$/) print $i}'
2
12121
-1212
45.62
^
字段开始
-?
包含一个-
或没有
/[0-9]+\.?[0-9]*/
[0-9]+
一个或多个数字
\.?
0或1 .
[0-9]*
零个或多个数字
提案结束$