在文件中使用不同的UUID交换字符串的Bash操作

3

我有一个定制的xml文件,我想在Bash中用唯一的UUID替换多次出现的字符串(例如“uuidVariable”)。

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

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

我能够生成 UUID 并储存它:

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

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

我知道如何计算出现的字符串,但我认为这对我没有更多帮助。

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

编辑: 我知道如何替换两个字符串,但这并不能解决每个字符串都是唯一的问题。

sed -i s/uuidVariable/UUID/g myfile.xml

可能已经被 https://dev59.com/mVkS5IYBdhLWcg3w456B#39350238 回答了。 - weirdan
2个回答

3
我想你可以这样做。
awk 'BEGIN { p="/proc/sys/kernel/random/uuid" }
    /uuidVariable/ { getline uuid < p; close(p)
        sub("uuidVariable", uuid) } 1' file.xml >newfile.xml

0

不使用外部工具,使用参数扩展

#!/usr/bin/env bash

source=/proc/sys/kernel/random/uuid

while IFS= read -r line; do
    printf '%s\n' "${line//uuidVariable/$(<"$source")}"
done < input > output

请注意,对于大型输入文件,此解决方案速度较慢。一些进一步的阅读材料:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接