我不确定解决这个问题的最佳方法,所以我想我会问。我有这样的一行:
NAME="/dev/sda" TYPE="disk" MODEL="KINGSTON SV300S3"
Run Code Online (Sandbox Code Playgroud)
(从 lsblk 获得,有几个选项),我想尽可能简单地提取每个字段。是的,我知道 lsblk 有一个非常好的 --json,但不幸的是,这是最近添加的,我无法使用,我们有一些相当旧的服务器仍在生产中。
也许将 Str 与一些正则表达式一起使用?谷歌似乎经常说menhir,我从来没有使用过它,但我担心仅仅对于这样的几个变量来说可能有点重?我尝试过使用 String.split_on_char 和 String.slice,但是当模型包含空格时,它开始变得复杂, String.split_on_char 当然不会忽略双引号之间的空格。
对于像这样的简单格式,Scanf 模块可能是一个可行的替代方案:
let extract s = Scanf.sscanf s "NAME=%S TYPE=%S MODEL=%S" (fun x y z -> x, y ,z);;
;; extract {|NAME="/dev/sda" TYPE="disk" MODEL="KINGSTON SV300S3"|}
Run Code Online (Sandbox Code Playgroud)
产量
(“/dev/sda”、“磁盘”、“KINGSTON SV300S3”)
正如预期的那样。
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |