Ans*_*imu 2 bash shell awk grep
我有这个shell脚本变量var.它保留3个以新行分隔的条目.从这个变量var,我想提取2和0.078688.只是这两个数字.
var="USER_ID=2
# 0.078688
Suhas"
Run Code Online (Sandbox Code Playgroud)
这些是我试过的代码:
echo "$var" | grep -o -P '(?<=\=).*(?=\n)' # For extracting 2
echo "$var" | awk -v FS="(# |\n)" '{print $2}' # For extracting 0.078688
Run Code Online (Sandbox Code Playgroud)
以上都没有工作.这里有什么问题?如何解决这个问题?
只需tr单独使用来保留数字,点(.)和空格,并删除其他所有内容.
tr -cd '0-9. ' <<<"$var"
2 0.078688
Run Code Online (Sandbox Code Playgroud)
从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
Run Code Online (Sandbox Code Playgroud)
或者在数组中
IFS=' ' read -ra numArray < <(tr -cd '0-9. ' <<<"$var")
printf "%s\n" "${numArray[@]}"
2
0.078688
Run Code Online (Sandbox Code Playgroud)
注意: - -cd旗tr是POSIX兼容的,并在任何具有系统将工作tr装.