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

Awk 从列表中的字符串中提取所有数字,awk,sed,tr,Awk,Sed,Tr,给定一些字符串“s”,我只想从该字符串中提取数字。我希望输出的数字被一个空格隔开 示例输入->输出 …IN:1,2,3 出局:123 …IN:1 2 a b c 3 出局:123 …单位:ab35jh71 1,2,3千焦$d3kjl23 输出:357112323 我已经尝试过grep-o[0-9]和grep-v[a-z]-v[a-z]的组合,但问题是,其他字符如-and可以在数字之间使用。无论数字之间有多少个非数字字符,我都需要将它们替换为一个空格 我也在试验awk和sed,但运气不好。根据所显

给定一些字符串“s”,我只想从该字符串中提取数字。我希望输出的数字被一个空格隔开

示例输入->输出 …IN:1,2,3 出局:123

…IN:1 2 a b c 3 出局:123

…单位:ab35jh71 1,2,3千焦$d3kjl23 输出:357112323

我已经尝试过grep-o[0-9]和grep-v[a-z]-v[a-z]的组合,但问题是,其他字符如-and可以在数字之间使用。无论数字之间有多少个非数字字符,我都需要将它们替换为一个空格


我也在试验awk和sed,但运气不好。

根据所显示的示例,您不确定预期输出中的空格,请尝试以下内容

awk '{gsub(/[^0-9]+/," ")} 1' Input_file
awk '{gsub(/[^0-9]+/," ");gsub(/^ +| +$/,"")} 1' Input_file
说明:用空格全局替换除数字以外的任何内容。1将打印当前行

$ echo 'ab#35jh71 1,2,3 kj$d3kjl23' | grep -o '[[:digit:]]*'
35
71
1
2
3
3
23
如果要删除输出中的初始/起始空间和结束空间,请尝试以下操作

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

说明:在当前行中用空格全局替换除数字以外的所有内容,然后在当前行中用NULL全局替换起始和结束空格。提及1将打印已编辑/未编辑的当前行。

根据显示的示例,不确定预期输出中是否有空格,请尝试以下内容

awk '{gsub(/[^0-9]+/," ")} 1' Input_file
awk '{gsub(/[^0-9]+/," ");gsub(/^ +| +$/,"")} 1' Input_file
$ echo 'ab#35jh71 1,2,3 kj$d3kjl23' | grep -o '[[:digit:]]*'
35
71
1
2
3
3
23
说明:用空格全局替换除数字以外的任何内容。1将打印当前行

$ echo 'ab#35jh71 1,2,3 kj$d3kjl23' | grep -o '[[:digit:]]*'
35
71
1
2
3
3
23
如果要删除输出中的初始/起始空间和结束空间,请尝试以下操作

awk '{gsub(/[^0-9]+/," ")} 1' Input_file
awk '{gsub(/[^0-9]+/," ");gsub(/^ +| +$/,"")} 1' Input_file
说明:在当前行中用空格全局替换除数字以外的所有内容,然后在当前行中用NULL全局替换起始和结束空格。1将打印已编辑/未编辑的当前行

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

应该是tr-sc'[:digit:'''这个解决方案很棒!非常简洁易读!你可以添加一个解释部分来解释-sc和你使用的正则表达式是如何工作的吗?应该是tr-sc'[:digit:''这个解决方案很棒!非常简洁易读!你可以添加一个解释部分来解释-sc和你使用的正则表达式是如何工作的吗?