首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bash转换字符串

使用bash转换字符串
EN

Stack Overflow用户
提问于 2019-12-11 22:31:02
回答 2查看 51关注 0票数 0

我想转换命令的输出:

代码语言:javascript
复制
dmidecode -s system-serial-number

它是一个如下所示的字符串:

代码语言:javascript
复制
VMware-56 4d ad 01 22 5a 73 c2-89 ce 3f d8 ba d6 e4 0c

至:

代码语言:javascript
复制
564dad01-225a-73c2-89ce-3fd8bad6e40c

我怀疑我首先需要在"VMware-“部分之后提取所有字母和数字,然后在字符10、14、18、22之后插入"-”。

为了尝试第一次提取,我尝试了:

代码语言:javascript
复制
$ 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

然而,这并不是正确的方向。

编辑:

这会让我转到一个日志字符串,但是它并不优雅:

代码语言:javascript
复制
$ echo `dmidecode -s system-serial-number | sed -s "s/VMware-//" | sed -s "s/-//" | sed -s "s/ //g"` 
564dad01225a73c289ce3fd8bad6e40c
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-11 22:41:50

就像这样:

代码语言:javascript
复制
dmidecode -s system-serial-number | 
    sed -E 's/VMware-//;
            s/ +//g;
            s/(.)/\1-/8;
            s/(.)/\1-/13;
            s/(.)/\1-/23'
票数 1
EN

Stack Overflow用户

发布于 2019-12-11 22:47:22

您可以使用Bash 子串提取

代码语言:javascript
复制
$ 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):

代码语言:javascript
复制
$ s1=${s:7}
$ s1="${s1// /}"
$ echo "${s1:0:8}-${s1:8:4}-${s1:12:9}-${s1:21}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59295108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档