gpt4 book ai didi

arrays - 修复虚拟机和描述 rune 件 - 重写 vmx

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:49 26 4
gpt4 key购买 nike

这是 grep -E "scsi0:"*.vmx | 的输出grep -E "fileName"命令在我的目录之一中:

scsi0:0.fileName = "vmname.vmdk"
scsi0:1.fileName = "vmname_1.vmdk"
scsi0:2.fileName = "vmname_2.vmdk"
scsi0:3.fileName = "P120_vmname_2.vmdk"
scsi0:4.fileName = "P120_vmname_3.vmdk"

我需要在该 vmx 文件中重写上述输出,使其看起来如下

scsi0:0.fileName = "vmname.vmdk"
scsi0:1.fileName = "vmname_1.vmdk"
scsi0:2.fileName = "vmname_2.vmdk"
scsi0:3.fileName = "vmname_3.vmdk"
scsi0:4.fileName = "vmname_4.vmdk"

因此本质上脚本需要以下内容:

  • 查找包含scsi0文件名的行,并删除vmname之前双引号后的所有内容
  • 检查该行中“scsi0:”后面的数字是什么,并在下划线后面添加/替换该数字,以便 P120_vmname_2 变为 vmname_3

问题是,vmname 之前可以有任意数量的字符需要删除,并且需要修复的行可以位于源文件中的任何位置。

我是否需要将单独的行输出分配给单独的变量,或者可以只用一个变量来操作它们?

谢谢

最佳答案

您可以将 grep 输出通过管道传输到 sed 中吗?

如果是这样,您可以进行如下替换:

sed -r 's/^(.*:)([[:digit:]]+)(.*) = \".*vmname_[[:digit:]]+/\1\2\3 = \"vmname_\2/'
# ^ ^ ^ ^ ^ ^ ^
# | | | | | | Replace number.
# | | | | | Re-create line start
# | | | | Match incorrect number
# | | | Match garbage before "vmname"
# | | Match Filename
# | Correct number
# Line start

所以你的实际命令将如下所示:

grep -E "scsi0:" *.vmx | grep -E "fileName" | \
sed -r 's/^(.*:)([[:digit:]]+)(.*) = \".*vmname_[[:digit:]]+/\1\2\3 = \"vmname_\2/'

转换此:

scsi0:0.fileName = "vmname.vmdk"
scsi0:1.fileName = "vmname_1.vmdk"
scsi0:2.fileName = "vmname_2.vmdk"
scsi0:3.fileName = "P120_vmname_2.vmdk"
scsi0:4.fileName = "P120_vmname_3.vmdk"
scsi0:5.fileName = "P12asdasdsada_asdasd_sdsad0_vmname_3.vmdk"
scsi0:6.fileName = "vmname_3.vmdk"

对此:

scsi0:0.fileName = "vmname.vmdk"
scsi0:1.fileName = "vmname_1.vmdk"
scsi0:2.fileName = "vmname_2.vmdk"
scsi0:3.fileName = "vmname_3.vmdk"
scsi0:4.fileName = "vmname_4.vmdk"
scsi0:5.fileName = "vmname_5.vmdk"
scsi0:6.fileName = "vmname_6.vmdk"

关于arrays - 修复虚拟机和描述 rune 件 - 重写 vmx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com