背景:
我有一个列应该以"描述文本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尝试以下内容,假设字符串中只有一个数字:
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
| 归档时间: |
|
| 查看次数: |
63229 次 |
| 最近记录: |