如何使用 sed 遍历文件并将输出保存在不同的文件中?

How to loop over files and save output in different files using sed?

我有两个不同的文件 A.txt 和 B.txt 都包含相同的字符串。 我想使用 sed 命令来替换字符串,但我不想覆盖 A.txt 和 B.txt.

实际上我想遍历文件,然后对两个文件都做这样的事情:

sed 's/myString/myNewString/g' A.txt > updatedA.txt

我可以使用什么技巧来以这种方式为尽可能多的文件重定向输出?假设我有 x *.txt 文件。

谢谢。

对当前目录中的所有 .txt 文件使用 for 循环:

for file in *.txt; do
  sed 's/myString/myNewString/g' "$file" > "updated$file"
done

每个目录仅使用此脚本一次。

这可能对你有用(GNU 并行):

parallel sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt

这将遍历当前目录中的所有 txt 文件,并使 amendments/copies 成为前缀为 updated 的新文件。

如果您只想为有更改的文件创建文件,请使用:

parallel grep myString {} \&\& sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt

或者重新遍历一个目录下的所有txt个文件,使用:

find . -name '*.txt' | parallel sed 's/myString/myNewString/g' {} \> {//}/updated{/}