如何使用grep获取第二个数字字段?例如,有一个字符串 12 34 56 78 ,我想得到第三个数字,我可以将字符串分成不同的标记:
echo "ab12 34_56.78" | grep -Eo "[[:digit:]]+"
输出是
12
34
56
78
如何从这里选择第n个数字?
假设您这样做了N=3
(或您想要的任何领域),有几种 bash 可能性。
echo "ab12 34_56.78" | grep -Eo "[[:digit:]]+" | tail -n+$n | head -n1
echo "ab12 34_56.78" | grep -Eo "[[:digit:]]+" | tr '\n' '\t' | cut -f$N
您可以在 awk 中轻松完成此操作,无需额外的 shell 命令:
echo "ab12 34_56.78" | awk -vN=3 -F'[^[:digit:]]+' '{print $(N+($1==""))}'
-F
将字段分隔符设置为匹配任何非数字序列的正则表达式;添加($1=="")
到N
是对付有第一个数字之前,没有非数字的可能性。
如果您有 Gnu grep 或其他提供 PCRE 的 grep 实现,您可以使用\K
“匹配点重置”断言:
echo "ab12 34_56.78" | grep -Po '(?:[[:digit:]]+[^[:digit:]]+){2}\K[[:digit:]]+'
或者如果你想用来$N
控制匹配的数量:
echo "ab12 34_56.78" | grep -Po '(?:[[:digit:]]+[^[:digit:]]+){'$((N-1))'}\K[[:digit:]]+'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句