从列表中的字符串中提取所有数字

Extract all numbers from string in list

给定一些字符串 's' 我只想从该字符串中提取数字。我希望输出的数字每个都由一个 space.

分隔

Example input -> output

....IN:1,2,3
OUT:1 2 3

....IN:1 2 a b c 3
OUT:1 2 3

....IN:ab#35jh71 1,2,3 kj$d3kjl23
OUT:35 71 1 2 3 3 23

我试过 grep -o [0-9]grep -v [a-z] -v [A-Z] 的组合,但问题是其他字符如 -# 可以在数字之间使用。 不管数字之间的非数字字符的数量,我需要将它们替换为 单个 space.

我也一直在试验 awksed,但运气不佳。

根据您显示的示例,不确定您的预期输出中是否有 spaces,请您尝试以下操作。

awk '{gsub(/[^0-9]+/," ")} 1' Input_file

解释: 用 space 全局替换数字以外的任何内容。提及 1 将打印当前行。



如果您想在输出中删除 initial/starting space 并以 space 结尾,请尝试以下操作。

awk '{gsub(/[^0-9]+/," ");gsub(/^ +| +$/,"")} 1' Input_file

解释: 将当前行中除数字以外的所有内容全局替换为 space,然后全局替换开始和结束 spaces,当前行为 NULL。提及 1 将打印 edited/non-edited 当前行。

$ echo 'ab#35jh71 1,2,3 kj$d3kjl23' | grep -o '[[:digit:]]*'
35
71
1
2
3
3
23
$ echo 'ab#35jh71 1,2,3 kj$d3kjl23' | tr -sc '[:digit:]' ' '
 35 71 1 2 3 3 23