从列表中的字符串中提取所有数字
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.
我也一直在试验 awk
和 sed
,但运气不佳。
根据您显示的示例,不确定您的预期输出中是否有 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
给定一些字符串 '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.
我也一直在试验 awk
和 sed
,但运气不佳。
根据您显示的示例,不确定您的预期输出中是否有 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