Bash交换具有不同UUID的文件中的字符串

时间:2018-08-20 14:02:23

标签: bash macos shell terminal

我有一个自定义xml,我试图在Bash中用唯一的UUID替换多个出现的字符串(例如“ uuidVariable”)。

tuple

我能够生成一个UUID并将其存储:

<dict>
    <key>Apple</key>
    <true/>
    <key>uuid</key>
    <string>uuidVariable</string>
</dict>

<dict>
    <key>Banana</key>
    <false/>
    <key>uuid</key>
    <string>uuidVariable</string>
</dict>

但是如何遍历myfile.xml并用新的UUID替换每个字符串呢?

我知道如何计算出现的字符串,但是我认为这不会进一步帮助我

UUID=$(cat /proc/sys/kernel/random/uuid) 

编辑: 我也知道如何替换2个字符串。但这不能解决每个唯一的问题。

countUUID=$(sed 's/uuidVariable/uuidVariable\n/g' myfile.xml | grep -c "uuidVariable")

2 个答案:

答案 0 :(得分:2)

我想你可以做这样的事情。

awk 'BEGIN { p="/proc/sys/kernel/random/uuid" }
    /uuidVariable/ { getline uuid < p; close(p)
        sub("uuidVariable", uuid) } 1' file.xml >newfile.xml

答案 1 :(得分:0)

没有外部实用程序,请使用parameter expansion

int

请注意,对于大型输入文件,此解决方案会很慢。一些进一步的阅读: