【问题标题】:How to loop over files and save output in different files using sed?如何使用 sed 循环文件并将输出保存在不同的文件中?
【发布时间】:2019-12-27 22:12:36
【问题描述】:
我有两个不同的文件 A.txt 和 B.txt 都包含相同的字符串。
我想使用sed 命令来替换字符串,但我不想覆盖 A.txt 和 B.txt。
其实我想遍历文件,然后对两者都做这样的事情:
sed 's/myString/myNewString/g' A.txt > updatedA.txt
我可以使用什么技巧来以这种方式将输出重定向到我想要的任意数量的文件?假设我有 x 个 *.txt 文件。
谢谢。
【问题讨论】:
标签:
linux
bash
shell
sed
command
【解决方案1】:
对当前目录中的所有 .txt 文件使用 for 循环:
for file in *.txt; do
sed 's/myString/myNewString/g' "$file" > "updated$file"
done
每个目录只使用一次此脚本。
【解决方案2】:
这可能对你有用(GNU 并行):
parallel sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt
这将遍历当前目录中的所有txt文件,并对以updated为前缀的新文件进行修改/复制。
如果您只想为有更改的文件创建文件,请使用:
parallel grep myString {} \&\& sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt
或者重新诅咒一个目录中的所有txt文件,使用:
find . -name '*.txt' | parallel sed 's/myString/myNewString/g' {} \> {//}/updated{/}