bash - 如何使用 grep 获取字符串中的第 n 个数字字段?
问题描述
如何使用 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:]]+'
推荐阅读
- ubuntu - 为动态域(如通配符)发出 ssl
- r - 为 sf 对象的绘图设置色阶限制
- r - 为R中的每一行生成具有不同概率的随机数
- react-native - Expo React Native 上的 Android 唯一 ID
- java - ParseHexBinary 被字符串愚弄?
- mysql - 无法通过 XAMPP 启动 mysql - mysql\db 崩溃
- docker - 如何保存 tcpdump 监控容器供以后分析
- dart - 递归获取stackoverflow
- reactjs - 如何使用带有其他“orderBy”的valid_until字段查询firestore中的数据
- image - Elementor 中的客户端图像映射