使用awk只抓取字符串中的数字

Rai*_*nen 17 regex awk

背景:
我有一个列应该以"描述文本ref12345678"的形式获得用户输入.我有现有的抢参考号码但不幸的是有些用户将其添加不正确,因此而不是脚本,"ref12345678"它可以是"ref 12345678","RF12345678","abcd12345678"或任何变化.当然,错误的格式会破坏一些触发的脚本.现在我无法控制该字段的用户输入,因此我想稍后在管道中创建脚本以获取该数字.

目前我正在剥离字母awk '{gsub(/[[:alpha:]]/, "")}; 1',但替换似乎是一个低效的解决方案.(我知道我也可以这样做sed -n 's/.*[a-zA-Z]//p',tr -d '[[:alpha:]]'但它们基本相同,我想要awk以获得额外的可编程性).

问题是,有没有办法将awk设置为只打印字符串中的数字,或者将字符串设置为字符串中的数字项?(或替代真的是解决这个问题的最有效方法).

总结一下:如何使用awk $ echo "ref12345678"仅打印"12345678"而不进行替换?

Ken*_*ent 25

如果awk 不是必须的:

grep -o '[0-9]\+'
Run Code Online (Sandbox Code Playgroud)

例:

kent$ echo "ref12345678"|grep -o '[0-9]\+'
12345678
Run Code Online (Sandbox Code Playgroud)

awk为例:

kent$ echo "ref12345678"|awk -F'[^0-9]*' '$0=$2'     
12345678
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,提供的awk示例没有完全做到,但引导我走正确的道路:`$ echo"ref12345678"| awk -F'[^ 0-9]*''{print $ 2}'`在OS X上附带awk的技巧. (3认同)

Ale*_*x S 5

您也可以使用awk尝试以下内容,假设字符串中只有一个数字:

awk '{print ($0+0)}'
Run Code Online (Sandbox Code Playgroud)

这会将整个字符串转换为数字,并且将保留仅实现符合数字描述的值的awk的方式.例如:

echo "19 trees"|awk '{print ($0+0)}'
Run Code Online (Sandbox Code Playgroud)

将产生:
19

  • 虽然只有当数字在前面时才有效 (5认同)