![如何使用 sed 读取列表来替换文本字符串](https://linux22.com/image/1399697/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E8%AF%BB%E5%8F%96%E5%88%97%E8%A1%A8%E6%9D%A5%E6%9B%BF%E6%8D%A2%E6%96%87%E6%9C%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我正在尝试编写一个 sed 脚本来从 shell 运行。我需要能够从外部文件读取 UUID 列表,其中包含两列
origtexta replacementa
origtextb replacementb
origtextc replacementc
该脚本需要对当前文件夹下的所有 txt 文件进行递归操作,查找“origtext?”的任何实例,并将其替换为第 2 列中的相应文本。如果可以将脚本存储在 /home/myuser/Scripts/ 中,并将其别名化,以便能够从任何调用它的地方运行,那就太好了,如果脚本在更改原始 txt 文件之前将其保存为 .txt.orig,那就太好了。
到目前为止,我一直在测试这一点:
#!/bin/sed
while read n k; do sed -i 's/$n/$k/g' *.txt; done < list
我在这个帖子中找到了:如何用另一个列表替换字符串列表
它似乎正在做一些事情,因为文件的日期更改为当前日期/时间,但实际上没有替换任何文本,所以我完全不确定如何让它工作。
答案1
我会坚持使用 bash。动态构建 sed 脚本
while read uuid uuid_alias; do
sed_script+="s/$uuid/$uuid_alias/g;"
done < list
find . -type f -name \*.txt -exec sed -i "$sed_script" '{}' +
为了提高时间效率,您需要尝试尽可能少地调用 sed。
另请注意,$variables 是不是在“单引号”内扩展——“双引号”允许变量扩展。