用新的UUID字符串替换所有UUID字符串

4

我有一个文本文件,其中包含一些不同的UUID字符串,我想用新的不同的UUID字符串替换所有的UUID字符串,在Bash中如何轻松地做到这一点?


或许有用:http://serverfault.com/questions/103359/how-to-create-a-uuid-in-bash - Giorgio
我知道如何创建UUID哈希... - timy
4
请提供更多信息,文本文件的外观如何,以及“新”UUID是如何存储的。需要替换整个文本文件还是只替换部分字符串? - Fredrik Pihl
3个回答

2
假设UUID格式仅包含十六进制字符,并在它们之间使用连字符,每个连字符之间的字符数为:8、4、4、4、12。 我还假设它们单独成行。
awk '
{
    if ($0 ~ /^[a-fA-F0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$/)
    {
        system("uuidgen")
    }
    else
    {
        print $0
    }
}' file-with-uuids > new-file-with-uuids

# To override the old file with the new:
mv -f new-file-with-uuids file-with-uuids

摆脱关于在一行上的假设: sed "s/[a-fA-F0-9]\{8\}-[A-Fa-f0-9]\{4\}-[A-Fa-f0-9]\{4\}-[A-Fa-f0-9]\{4\}-[A-Fa-f0-9]\{12\}/$(uuidgen)/g" - Max Bileschi

1

这样怎么样:

sed -i "s/$OLDUUID/$NEWUUID/g" file.txt 

从你的描述中无法确定,如果你有多个(不同的)UUID需要替换,你可能需要链接这样的操作。


谢谢Fredrik!这就是我来这里的原因! - jman
sed -i "s/$OLDUUID/$NEWUUID/g" file.txt 将会把所有的UUID字符串替换成相同的一个,我需要把所有的UUID字符串都替换成不同的 :) - timy
有一个OLDUUID但是有多个NEWUUIDs? - jman
不,由uuidgen生成的多个OLDUUID和多个NEWUUID。 - timy

0
迟来了,但如果还有其他人想要在文件中用新的UUID替换所有UUID,这个awk命令应该会有所帮助:
awk '/[a-fA-F0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}/{"uuidgen" | getline uuid; close("uuidgen"); gsub(/[a-fA-F0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}/, uuid)};{print}' myfile > mynewfile

每次遇到包含 UUID 的行,都会生成一个新的 UUID 并将现有的 UUID 替换为新生成的 UUID。

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