使用bash转换字符串
我要转换命令的输出:使用bash转换字符串,bash,grep,Bash,Grep,我要转换命令的输出: dmidecode -s system-serial-number 这是一个如下所示的字符串: VMware-56 4d ad 01 22 5a 73 c2-89 ce 3f d8 ba d6 e4 0c 致: 我想我首先需要提取“VMware-”后面的所有字母和数字,然后在字符10、14、18、22后面的已知位置插入“-” 要尝试我尝试过的第一次提取: $ echo `dmidecode -s system-serial-number | grep -oE '(VMw
dmidecode -s system-serial-number
这是一个如下所示的字符串:
VMware-56 4d ad 01 22 5a 73 c2-89 ce 3f d8 ba d6 e4 0c
致:
我想我首先需要提取“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
像这样:
dmidecode -s system-serial-number |
sed -E 's/VMware-//;
s/ +//g;
s/(.)/\1-/8;
s/(.)/\1-/13;
s/(.)/\1-/23'
像这样:
dmidecode -s system-serial-number |
sed -E 's/VMware-//;
s/ +//g;
s/(.)/\1-/8;
s/(.)/\1-/13;
s/(.)/\1-/23'
您可以使用Bash:
或者,仅内置(即,无tr
):
您可以使用Bash:
或者,仅内置(即,无tr
):
您只能使用带有此参数扩展的内置项来删除空格:
echo“${s//}”
您只能使用带有此参数扩展的内置项来删除空格:echo“${s//}”
\s
仅为GNU使用。替换s/\s+//g代码>与s/+//g代码>对于POSIX SED…\s
仅为GNU SED。替换s/\s+//g代码>与s/+//g代码>用于POSIX SED。。。
$ 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
$ s1=${s:7}
$ s1="${s1// /}"
$ echo "${s1:0:8}-${s1:8:4}-${s1:12:9}-${s1:21}"