从Shell Script变量中提取分隔符之间的数据

Ans*_*imu 2 bash shell awk grep

我有这个shell脚本变量var.它保留3个以新行分隔的条目.从这个变量var,我想提取20.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)

以上都没有工作.这里有什么问题?如何解决这个问题?

Ini*_*ian 5

只需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)

注意: - -cdtrPOSIX兼容的,并在任何具有系统将工作tr装.