bash - 从 Shell 脚本变量中提取定界符之间的数据

标签 bash shell awk grep

我有这个 shell 脚本变量,var。它保留 3 个条目,用换行符 分隔。从这个变量 var,我想提取 20.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/

相关文章:

linux - 在脚本中创建临时文件 : Advantages of mktemp over touch-ing a file?

linux - 结合greps制作脚本来计算文件夹中的文件

linux - 按一个字段合并行

linux - 如何在 OSX 中执行 `sort -V`?

java - 无法从java向bash脚本发送参数

linux - Bash 脚本操作

c++ - 如何在 unix shell 中在后台执行命令?

linux - xsel -o 等效于 OS X

bash - awk中单引号和双引号的区别

bash - 将 shell 脚本设置为 utf8