You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中为file.txt内每个'dummy'替换不同UUID?

替换文件中每处'dummy'为独立UUID的解决方案

你遇到的这个问题我之前也碰到过——普通的sed命令里$(uuidgen)只会在命令启动前执行一次,结果所有dummy都被换成同一个UUID,完全达不到每个位置用不同UUID的需求。下面给你几个实用的解决办法,从单行命令到极简脚本都有:

1. GNU Sed单行命令(推荐,Linux默认可用)

GNU Sed支持e标记,能让每次匹配时执行shell命令并把输出作为替换内容,完美解决这个问题:

sed -i 's/dummy/$(uuidgen)/e' file.txt

原理很简单:每匹配到一个dummy,就会执行一次uuidgen生成新的UUID,用这个结果替换掉匹配到的字符串,自然每个位置的UUID都不一样。

如果是在macOS上(用的是BSD Sed),需要稍微调整写法,而且-i参数要加空字符串:

sed -i '' -e 's/dummy/`uuidgen`/e' file.txt

2. Awk单行命令(跨平台兼容)

要是需要兼顾Linux和macOS的兼容性,Awk是个更稳妥的选择,写法基本通用:

awk '{while (sub(/dummy/, cmd="uuidgen"; cmd | getline uuid; close(cmd); uuid)) {} print}' file.txt > temp.txt && mv temp.txt file.txt

这个命令会逐行处理文件,每行里的每个dummy都会触发一次uuidgen调用,替换完成后再打印整行。因为Awk没法直接修改原文件,所以我们把输出写到临时文件,最后替换原文件。

3. 最简Bash脚本(逻辑清晰易维护)

如果单行命令记起来费劲,写个极简的Bash脚本也很方便,逻辑一目了然:

#!/bin/bash
# 逐行读取原文件
while IFS= read -r line; do
    # 替换当前行里所有的dummy
    while [[ $line == *dummy* ]]; do
        uuid=$(uuidgen)
        line=${line/dummy/$uuid}
    done
    # 输出处理后的行
    echo "$line"
done < file.txt > temp.txt && mv temp.txt file.txt

把这个脚本保存为replace_dummy.sh,给它加执行权限chmod +x replace_dummy.sh,运行就能完成替换。

示例验证

假设你的输入文件内容是:

{ {"myid":"dummy"}, {"myid":"ymmud"}, {"myid":"dummy"}, {"myid":"ymmud"}, {"myid":"dummy"}, {"myid":"ymmud"} }

用上面的任意一种方法处理后,输出会类似:

{ {"myid":"79769E7B-BED5-4CB5-AEF9-CCE445D9212E"}, {"myid":"ymmud"}, {"myid":"F2FDDD4A-4800-4F0F-911A-FEDBC82915DD"}, {"myid":"ymmud"}, {"myid":"52D93565-81E9-479C-8BD9-457754581BBE"}, {"myid":"ymmud"} }

完全符合你想要的每个dummy对应独立UUID的效果。

内容的提问来源于stack exchange,提问作者João Matos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:28