file.txt 多次出现“dummy”一词,目标是用新颖的 UUID 替换每次出现的此类词。
我想知道是否有使用单行命令的解决方案,但如果没有,我想要最简单的 bash 脚本。例如,符合以下条件的内容:
sed -i "s/dummy/$(uuidgen)/g" file.txt
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个命令用相同的 uuid 替换每个单词“dummy”。
例如
输入:
{
{"myid":"dummy"},
{"myid":"ymmud"},
{"myid":"dummy"},
{"myid":"ymmud"},
{"myid":"dummy"},
{"myid":"ymmud"}
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
{
{"myid":"79769E7B-BED5-4CB5-AEF9-CCE445D9212E"},
{"myid":"ymmud"},
{"myid":"F2FDDD4A-4800-4F0F-911A-FEDBC82915DD"},
{"myid":"ymmud"},
{"myid":"52D93565-81E9-479C-8BD9-457754581BBE"},
{"myid":"ymmud"}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有使用单行命令的解决方案,但如果没有,我想要最简单的 bash 脚本
这是您的问题的可能解决方案:
假设您的输入文件是例如。
{
{"myid":"dummy"},
{"myid":"ymmud"},
{"myid":"dummy"},
{"myid":"ymmud"},
{"myid":"dummy"},
{"myid":"ymmud"}
}
Run Code Online (Sandbox Code Playgroud)
然后是下面的bash脚本
while IFS= read -r line; do
echo $line | sed "s/dummy/`uuid`/g";
done < jsonfile
Run Code Online (Sandbox Code Playgroud)
将输出
{
{"myid":"a1c3874c-601d-11e8-97bd-705ab6b2eca7"},
{"myid":"ymmud"},
{"myid":"a1c45e56-601d-11e8-922c-705ab6b2eca7"},
{"myid":"ymmud"},
{"myid":"a1c57390-601d-11e8-aa47-705ab6b2eca7"},
{"myid":"ymmud"}
}
Run Code Online (Sandbox Code Playgroud)
最初您的问题谈到了textfile因此这个特定的解决方案,它忽略了格式。如果你想专门操作 JSON,我推荐例如。jq( apt-get install jq)。
通过新颖的 UUID
UUID 密钥空间(取决于 UUID 类型)非常大。鉴于数据量较少,不太可能导致冲突。