我的字符串是Apps-10.00.00R000-B1111_vm-1.0.3-x86_64.qcow2,我要的结果是vm-1.0.3
最好的方法是什么
以下是我尝试的内容
$ echo Apps-10.00.00R000-B1111_vm-1.0.3-x86_64.qcow2 | awk -F _ {'print $2'} | awk -F - {'print $1,$2'}
虚拟机1.0.3
我也试过
$ echo Apps-10.00.00R000-B1111_vm-1.0.3-x86_64.qcow2 | awk -F _ {'print $2'} | awk -F - {'print $1"-",$2'}
虚拟机- 1.0.3
这里我不需要中间的空间
我尝试使用cut,并得到预期的结果
$ echo Apps-10.00.00R000-B1111_vm-1.0.3-x86_64.qcow2 | awk -F _ {'print $2'} | cut -c 1-8
虚拟机-1.0.3
做同样的事情的最好方法是什么?
4条答案
按热度按时间deikduxw1#
从您提供的1个示例中假设输入的一般形式,以便使用任何sed:
或任何awk:
zfciruhq2#
您不需要2次调用awk,但您的语法需要在curly's外加上单引号,包括打印连字符:
如果字符串具有相同的格式,则将字段分隔符设为
-
或_
或者拆分
-
上的第二个字段并打印前两部分或者用
gnu-awk
与捕获组进行更具体一点的匹配:输出量
wi3ka0sx3#
这是我能想到的最简单的办法:
显然你需要确定你的角色的位置。在上面,你似乎有两个分隔符:“_”和“-”,而这两个字符也是条目名称的一部分。
n3schb8v4#