我有这个 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 [OPTION]... SET1 [SET2]
-c, -C, --complement use the complement of SET1
-d, --delete delete characters in SET1, do not translate
将其存储在变量中,
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
的系统上工作安装。
关于bash - 从 Shell 脚本变量中提取定界符之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41823142/