我有这个shell脚本变量var.它保留3个以新行分隔的条目.从这个变量var,我想提取2和0.078688.只是这两个数字.
var="USER_ID=2 # 0.078688 Suhas"
这些是我试过的代码:
echo "$var" | grep -o -P '(?<=\=).*(?=\n)' # For extracting 2 echo "$var" | awk -v FS="(# |\n)" '{print $2}' # For extracting 0.078688
以上都没有工作.这里有什么问题?如何解决这个问题?
只需tr
单独使用来保留数字,点(.
)和空格,并删除其他所有内容.
tr -cd '0-9. ' <<<"$var" 2 0.078688
从man
页面上,tr
为的使用-c
,-d
标志,
tr [选项] ... SET1 [SET2]
-c,-C, - compmplement使用SET1的补码
-d, - 删除SET1中的删除字符,不要翻译
要将其存储在变量中,
IFS=' ' read -r var1 var2 < <(tr -cd '0-9. ' <<<"$var") printf "%s\n" "$var1" 2 printf "%s\n" "$var2" 2 0.078688
或者在数组中
IFS=' ' read -ra numArray < <(tr -cd '0-9. ' <<<"$var") printf "%s\n" "${numArray[@]}" 2 0.078688
注意: - -cd
旗tr
是POSIX
兼容的,并在任何具有系统将工作tr
装.