我想转换命令的输出:
dmidecode -s system-serial-number它是一个如下所示的字符串:
VMware-56 4d ad 01 22 5a 73 c2-89 ce 3f d8 ba d6 e4 0c至:
564dad01-225a-73c2-89ce-3fd8bad6e40c我怀疑我首先需要在"VMware-“部分之后提取所有字母和数字,然后在字符10、14、18、22之后插入"-”。
为了尝试第一次提取,我尝试了:
$ echo `dmidecode -s system-serial-number | grep -oE '(VMware-)?[a0-Z9]'`
VMware-5 6 4 d a d 0 1 2 2 5 a 7 3 c 2 8 9 c e 3 f d 8 b a d 6 e 4 0 c然而,这并不是正确的方向。
编辑:
这会让我转到一个日志字符串,但是它并不优雅:
$ echo `dmidecode -s system-serial-number | sed -s "s/VMware-//" | sed -s "s/-//" | sed -s "s/ //g"`
564dad01225a73c289ce3fd8bad6e40c发布于 2019-12-11 22:41:50
就像这样:
dmidecode -s system-serial-number |
sed -E 's/VMware-//;
s/ +//g;
s/(.)/\1-/8;
s/(.)/\1-/13;
s/(.)/\1-/23'发布于 2019-12-11 22:47:22
您可以使用Bash 子串提取
$ s="VMware-56 4d ad 01 22 5a 73 c2-89 ce 3f d8 ba d6 e4 0c"
$ s1=$(echo "${s:7}" | tr -d '[:space:]')
$ echo "${s1:0:8}-${s1:8:4}-${s1:12:9}-${s1:21}"
564dad01-225a-73c2-89ce-3fd8bad6e40c或者,仅内置(即没有tr):
$ s1=${s:7}
$ s1="${s1// /}"
$ echo "${s1:0:8}-${s1:8:4}-${s1:12:9}-${s1:21}"https://stackoverflow.com/questions/59295108
复制相似问题