如何使用grep仅提取文本中的两个数字字段?
解决grep提取数字并合并为一行的问题
你的原命令echo "hello 34 others 28" | grep -Eo "([0-9]+).*([0-9]+)"不符合预期的原因是:-o选项会输出整个匹配到的完整字符串,而你的正则匹配的是从第一个数字开始到最后一个数字结束的全部内容,所以输出结果是34 others 28,而非单独的数字字段。
以下是两种可行的解决方法:
方法1:grep提取数字后用tr转换换行
先用grep -Eo '[0-9]+'逐个匹配所有数字(每个数字单独占一行),再用tr将换行符替换为空格,最后用sed去掉末尾多余的空格:
echo "hello 34 others 28" | grep -Eo '[0-9]+' | tr '\n' ' ' | sed 's/ $//'
方法2:grep结合paste合并行
如果你的系统支持Perl正则(grep的-P选项),可以用更简洁的\d+匹配数字,再用paste把多行结果合并为单行:
echo "hello 34 others 28" | grep -Po '\d+' | paste -sd ' ' -
内容的提问来源于stack exchange,提问作者user6018651
相关产品推荐
相关产品推荐

