You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串提取数字并单空格分隔?已试grep/awk/sed未果

提取字符串中数字并以单个空格分隔的解决方案

我来给你几个靠谱的解决办法,完美匹配你要的需求,解决之前那些命令处理不了非数字字符的问题:

方法1:用sed一步到位

这个命令可以直接完成所有处理,不需要组合其他工具:

sed -E 's/[^0-9]+/ /g; s/^ //; s/ $//'

拆解一下每个部分的作用:

  • s/[^0-9]+/ /g:把任意连续的非数字字符替换成单个空格,解决了你之前遇到的-、#等特殊字符无法处理的问题
  • s/^ //:如果字符串开头有空格(比如开头就是非数字字符的情况),把开头的空格去掉
  • s/ $//:同理,去掉结尾多余的空格

测试示例:

输入:ab#35jh71 1,2,3 kj$d3kjl23
运行命令后输出:35 71 1 2 3 3 23

方法2:grep+tr组合(更直观的分步处理)

如果你更喜欢分步操作,用grab提取数字再用tr转换格式:

grep -Eo '[0-9]+' | tr '\n' ' ' | sed 's/ $//'

各步骤作用:

  • grep -Eo '[0-9]+':提取所有连续的数字序列,每个序列单独占一行(之前你用的[0-9]只会提取单个数字,改成[0-9]+就能拿到完整的数字串)
  • tr '\n' ' ':把所有换行符换成空格,把多行数字变成一行用空格分隔
  • sed 's/ $//':去掉最后多余的空格

方法3:用awk处理

awk也能轻松完成这个任务,命令如下:

awk '{gsub(/[^0-9]+/, " "); sub(/^ /, ""); sub(/ $/, ""); print}'

解释:

  • gsub(/[^0-9]+/, " "):全局替换所有连续非数字字符为单个空格
  • sub(/^ /, ""):移除开头的空格
  • sub(/ $/, ""):移除结尾的空格
  • print:输出最终处理后的结果

内容的提问来源于stack exchange,提问作者Lenna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:12:54