2011-07-25 149 views
2

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

+0

或许有用:http://serverfault.com/questions/103359/how-to-create-a-uuid-in-bash – Giorgio

+0

我知道如何创建UUID的哈希... – timy

+4

您需要提供一些更多的信息,文本文件是什么样的,以及如何存储“新”uuid。需要替换文本文件中的所有或仅某些字符串? –

回答

1

如何:

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

不能从您的描述说,如果你有多个(不同的)UUID来代替这些,你可能需要到连锁这样的操作。

+2

查看sed的“-i”标志,不需要* mv *部分... –

+0

感谢Fredrik!这就是为什么我在这里闲逛! – jman

+0

sed -i“s/$ OLDUUID/$ NEWUUID/g”file.txt 将全部替换所有UUID字符串,我需要替换所有UUID字符串全部不同:) – timy

2

假设uuid格式只包含带有连字符的十六进制数字,并且这些字符串在每个hypen之间: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 
+0

摆脱关于在一条线上的假设: 'sed“s/[a-fA-F0-9] \ {8 \} - [A -Fa-f0-9] \ {4 \} - [A-发f0-9] \ {4 \} - [A-发f0-9] \ {4 \} - [A-发f0- 9] \ {12 \}/$(的uuidgen)/ G“' –

相关问题